winforms 如何在Enabled为false时使按钮和文本框具有原始外观

icomxhvb  于 2023-02-09  发布在  其他
关注(0)|答案(1)|浏览(111)

当我使C# WinForms按钮和文本框启用=假颜色和设计得到灰色,所以我需要任何技巧或代码,使文本框看起来启用真,而其启用=假。

mtb9vblg

mtb9vblg1#

对于TextBox,实现此目标的一种方法是拦截WM_PAINT消息并检查Enabled属性。如果该属性为false,则使用TextBoxRenderer类绘制文本框,就像启用了它一样。
尝试用这个自定义版本交换设计器文件中TextBox的示例:

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

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
           );
        }
    }
}

相关问题