评论会员:弗雷泽J 时间:2011/12/15
Gidday,我已经使用了一段时间现在,但当前的项目,我很多PC的工作没有视觉样式激活。我无法改变这一点。我添加下面的代码(下面的错误),但是我偶尔会得到这个错误:
异常:System.ArgumentException:参数无效BR} System.Drawing.Bitmap ..构造函数(Int32的宽度,高度的Int32,PixelFormat的格式)
System.Drawing.Bitmap ..构造函数(Int32的宽度,Int32的高度)
System.Windows.Forms.ControlPaint.DrawFrameControl(,INT32,INT32 x Graphics图形的Int32宽度,Int32的高度,Int32的一种,INT32状态,前景色颜色,颜色的BackColor)
System.Windows.Forms.ControlPaint.DrawComboButton(Graphics图形,INT32 x,INT32 Ÿ,Int32的宽度,Int32的高度,ButtonState状态)
System.Windows.Forms.ControlPaint.DrawComboButton(Graphics图形,矩形矩形,ButtonState状态)
保护类DblPanel
继承面板
; 保护重载覆盖分BYVAL e作为PaintEventArgs的OnPaint()
如果Me.Visible = True,则
如果ComboBoxRenderer.IsSupported然后
&
#160; ComboBoxRenderer.DrawDropDownButton(e.Graphics,e.ClipRectangle,System.Windows.Forms.VisualStyles.ComboBoxState.Disabled)
160; ELSE
如果Me.Enabled然后
&
#160; ControlPaint.DrawComboButton(e.Graphics,e.ClipRectangle,ButtonState.Normal)
0; ELSE
160; ControlPaint.DrawComboButton(e.Graphics,e.ClipRectangle,ButtonState.Inactive)
最终如果
; 最终如果
0; 最终如果
END SUB
尾类
任何想法就如何防止错误
评论会员:?法比奥佛朗哥 时间:2011/12/15
偶尔你说你的错误?什么样的情况触发呢?
我从您的代码可以看到的是,这部分是不必要的(除非你改变一些行为):
ELSE
如果Me.Enabled然后
ControlPaint.DrawComboButton(e.Graphics,e.ClipRectangle,ButtonState.Normal)
ELSE
ControlPaint.DrawComboButton(e.Graphics,e.ClipRectangle,ButtonState.Inactive)
最终如果
你只需要绘制如果可见= TRUE。如果不是,则需要没有平局,ButtonState.Normal是原有的控制本身已经绘制成的面板将不可见。
你想要的是检查的ComboBoxRender.IsSupported。如果是的话,使用的VisualStyles,如果它不使用ButtonSatate.Inactive。
ControlPaint的绘制方法是在任何情况下,造成的问题,我不知道可能是什么原因,因为我不熟悉其实施。为了解决这个问题,我建议您使用自定义绘图时禁用视觉样式,在文章中解释
我很抱歉,如果我不能帮助您进一步。的问候,
法比奥
评论会员:ger0nim0 时间:2011/12/15
究竟是什么,我一直在寻找。非常感谢你们
评论会员:。法比奥佛朗哥 时间:2011/12/15
我很高兴能帮助
感谢您的投票。
的问候,
法比奥
评论会员:会员1974570 时间:2011/12/15
喜
您添加到您的ComboBox控制面板,什么茹试图在那里做?
茹:使用控制面板的"面具"的控制,以支持"只读"?纠正我,如果我错了。
TIA的
修改,2009年4月30日,日(星期四)7:51
评论会员:法比奥佛朗哥 时间:2011/12/15
。嗨,我插入了一个在继承的控制面板,所以将原来的下拉按钮上面板的大小,大到足以覆盖整个下拉按钮。然后,我画此面板上禁用的下拉按钮的样子。
我希望这个回答你的问题。
的问候,
法比奥
评论会员:会员1974570 时间:2011/12/15
感谢您的回复。法比奥
所以技巧是什么?"OnKeyPress"和"OnKeyDown"的方法
TIA
评论会员:法比奥佛朗哥 时间:2011/12/15
。太
但也有"OnKeyPress"和"OnKeyDown"事件不会处理。
例如鼠标滚轮。鼠标滚轮也改变选定的项目,这样一来处理它。我需要重写WndProc方法,捕获所有消息发送到控制,我检查它是否是一个滚轮的消息和处理它,如果它是
也有Tab和箭头键,我处理覆盖ProcessCmdKey方法。
的问候,
法比奥
评论会员:吉奥Bejarasco 时间:2011/12/15
尼斯文章法比奥。这种控制的人在WinForms数据演示和验证是非常细致的,我是有价值的。我真的想创造之前,这样的事情,但我无法让自己开始。我总是诉诸繁琐的ComboBox文本框交换技术
评论会员:。DotDue 时间:2011/12/15
哦,这种做法已alway苦恼我的东西激烈。我很高兴地看到,有人做了本文。
-
托马斯由于
"个人精神错乱,是罕见的东西 - 但在团体,政党,国家和时代,它是规则"
- 尼采
评论会员:法比奥佛朗哥 时间:2011/12/15
吉奥Bejarasco写道:不错的文章法比奥。这种控制的人在WinForms数据演示和验证是非常细致的,我是有价值的。我真的想创造之前,这样的事情,但我无法让自己开始。我总是诉诸繁琐的ComboBox文本框交换技术。
吉奥您好,我很高兴为你工作。我得非常细致的数据演示和验证,并,我的意思是,这只是没有问这家伙,它为我工作,以及
感谢您的反馈。
的问候,
法比奥
评论会员:DotDue 时间:2011/12/15
首先,我想说这是我在寻找一个只读的ComboBox,我接触过还来的最大和最简单的解决方案。
对你的赞誉。
我有增加(我觉得)改善的一些建议:
1。使背景灰色时只读,像一个TextBox。我为只读的setter添加一行:
{C}
2。更换所有在你DblPanel的这种涂料,代码:
protected override void OnPaint(PaintEventArgs e)
{
if (this.Visible == true)
{
ComboBoxRenderer.DrawDropDownButton(e.Graphics, e.ClipRectangle,
System.Windows.Forms.VisualStyles.ComboBoxState.Disabled);
}
}
但这些只是建议。控制仍然是伟大的,我一定会在我的项目使用。 {S1}
-
托马斯由于
"个人精神错乱,是罕见的东西 - 但在团体,政党,国家和时代,它是规则"
- 尼采
评论会员:游客 时间:2011/12/15
法比奥佛朗哥:喜DotDue,我很高兴你发现它有用,我感谢您的反馈至于你的建议:DotDue写道:1。使背景灰色时只读,像一个TextBox。我为只读的setter添加一行:this.BackColor=(m_Unselectable)?SystemColors.Control:SystemColors.Window;其实我更喜欢不限制用户所设置的颜色,我把它给用户,这样他可以做他喜欢。它是为想这功能做手工时,他比其他的方式处理EnabledChanged事件周围的人更容易。我认为,这种做法也涉及回忆过去的背景色设置,因为它现在的方式,当用户从只读状态,他的背部颜色变化之前将丢失。DotDue写道:2。更换所有在你DblPanel的这种涂料,代码:保护覆盖无效的OnPaint(PaintEventArgs的E){(this.Visible==TRUE) {ComboBoxRenderer.DrawDropDownButton(e.Graphics,e.ClipRectangle, System.Windows.Forms.VisualStyles.ComboBoxState.Disabled);}}事实上,比我提供一个更好的方法,我将进行更改和更新的文章。我将离开旧油漆代码的注释,以防有人希望给下拉按钮不同的颜色。再次感谢您的反馈。的问候,法比奥
DotDue
评论会员:游客 时间:2011/12/15
法比奥佛朗哥说:其实我更喜欢不限制用户所设置的颜色,我把它给用户,这样他可以做他喜欢。它是为想这功能做手工时,他比其他的方式处理EnabledChanged事件周围的人更容易。我认为,这种做法也涉及回忆过去的背景色设置,因为它现在的方式,当用户从只读状态,他的背部颜色变化之前将丢失。哦,当然是真实的。味道当然是一个问题。我从来没有想过改变背景颜色。它都必须存储在某个地方,当然。-托马斯由于"个人精神错乱,是罕见的东西-但在团体,政党,国家和时代,它是规则"-尼采
josephlawrencecarpio
评论会员:游客 时间:2011/12/15
你不明白这一点,但在现实中,这有助于我们的球员,一个ComboBox的属性设置启用难以阅读。与此,文章,它是由你如何处理只读组合框。简单,因为它是....imgsrc=http://www.orcode.com/upimg/2011_12_15_18_24_59_2.gif你得5darkmaster35
法比奥佛朗哥
评论会员:游客 时间:2011/12/15
谢谢约瑟夫,它始终是很好听,我可以帮助的人。我这样做,因为我从几个开发商听说过这个残疾组合框的阅读问题。再次感谢您的反馈。的问候,法比奥
法比奥佛朗哥
评论会员:游客 时间:2011/12/15
但是你上面的截图,控制显示一个灰色的背景色设置为ReadOnly。如果我尝试使用您的控制,背景色为白色...?!?!?{BR}加-即使你不能选择一个新项目从下拉,你仍然可以突出显示文本,并删除它或改变它的风格,如果是下拉。所以看来,这不是真正的只读...imgsrc=http://www.orcode.com/upimg/2011_12_15_18_24_59_2.gif欢呼声,约翰尼J.
法比奥佛朗哥
评论会员:游客 时间:2011/12/15
嗨,在这种情况下的灰色背景色,它是因为它被选中,这是在我的测试应用程序的配置选择颜色。关于能够突出和删除文本,我会检查它在这里。反馈。的问候,法比奥
dfjohn005
评论会员:游客 时间:2011/12/15
好,我想我让unoticed传递。但现在你无法编辑文本时的ReadOnly设置为true。页面顶部的链接。的问候,法比奥
法比奥佛朗哥
评论会员:游客 时间:2011/12/15
为什么不只是使用DropDownStyle属性,DropDownList的值??
托马斯斯托克韦尔
评论会员:游客 时间:2011/12/15
使用dropdownstyle作为DropDownList的不会阻止用户改变ComboBox中选定的指数。也许你误解了ComboBox的ReadOnly的概念。
法比奥佛朗哥
评论会员:游客 时间:2011/12/15
你可以将Enabled属性设置为false。的问候,托马斯斯托克韦尔编程,今天是一个软件工程师努力建立更大,更好的白痴型的方案,以及宇宙产生更大,更好的白痴之间的比赛。到目前为止,宇宙是获胜。访问我的主页imgsrc=http://www.orcode.com/upimg/2011_12_15_18_24_59_1.gif