当我使C# WinForms按钮和文本框启用=假颜色和设计得到灰色,所以我需要任何技巧或代码,使文本框看起来启用真,而其启用=假。
mtb9vblg1#
对于TextBox,实现此目标的一种方法是拦截WM_PAINT消息并检查Enabled属性。如果该属性为false,则使用TextBoxRenderer类绘制文本框,就像启用了它一样。尝试用这个自定义版本交换设计器文件中TextBox的示例:
TextBox
WM_PAINT
Enabled
class TextBoxEx : TextBox { const int WM_PAINT = 0x000F; protected override void WndProc(ref Message m) { if (m.Msg.Equals(WM_PAINT) && !Enabled) { paintDisabled(); return; } base.WndProc(ref m); } private void paintDisabled() { using (Graphics graphics = CreateGraphics()) { TextBoxRenderer.DrawTextBox( graphics, Bounds, System.Windows.Forms.VisualStyles.TextBoxState.Normal ); } } }
按钮
在这种情况下,将使用ButtonRendererClass。
ButtonRendererClass
class ButtonEx : Button { const int WM_PAINT = 0x000F; protected override void WndProc(ref Message m) { if (m.Msg.Equals(WM_PAINT) && !Enabled) { paintDisabled(); return; } base.WndProc(ref m); } private void paintDisabled() { using (Graphics graphics = CreateGraphics()) { ButtonRenderer.DrawButton( graphics, Bounds, System.Windows.Forms.VisualStyles.PushButtonState.Normal ); } } }
1条答案
按热度按时间mtb9vblg1#
对于
TextBox
,实现此目标的一种方法是拦截WM_PAINT
消息并检查Enabled
属性。如果该属性为false,则使用TextBoxRenderer类绘制文本框,就像启用了它一样。尝试用这个自定义版本交换设计器文件中
TextBox
的示例:按钮
在这种情况下,将使用
ButtonRendererClass
。