C# 禁用表单,但使其每个元素看起来都处于启用状态

C# 禁用表单,但使其每个元素看起来都处于启用状态,c#,winforms,C#,Winforms,我想禁用整个表单,但仍然要保持每个表单元素(如文本框、按钮等)看起来都处于启用状态 所以,我想阻止这些元素上的用户交互,但保留其标准外观,而不是灰显等 这可以通过自动方式完成,还是只需要手动处理每个受影响控件的EnabledChanged事件?对于所有控件,默认情况下backcolor属性设置为window。选择所有颜色并设置为白色或所需颜色以获得相同的外观。 您可能希望对文本和边框颜色执行相同的操作。这完全取决于您想要的定制级别 要完全控制颜色,您需要重新绘制它们 protected over

我想禁用整个表单,但仍然要保持每个表单元素(如文本框、按钮等)看起来都处于启用状态

所以,我想阻止这些元素上的用户交互,但保留其标准外观,而不是灰显等


这可以通过自动方式完成,还是只需要手动处理每个受影响控件的EnabledChanged事件?

对于所有控件,默认情况下backcolor属性设置为window。选择所有颜色并设置为白色或所需颜色以获得相同的外观。 您可能希望对文本和边框颜色执行相同的操作。这完全取决于您想要的定制级别

要完全控制颜色,您需要重新绘制它们

protected override void OnPaint ( System.Windows.Forms.PaintEventArgs e )
{
    if ( Enabled )
    {
        //use normal realization
        base.OnPaint (e);
        return;
    }
    //custom drawing
    using ( Brush aBrush = new SolidBrush( "YourCustomDisableColor" ) )
    {
        e.Graphics.DrawString( Text, Font, aBrush, ClientRectangle );
    }
}

最简单的解决方案是在所有控件的顶部有一个透明的图像,当您想要禁用控件时,只需显示它


此图像将捕获所有鼠标输入,但仍可以通过键盘选择控件。

您可以用透明图像覆盖表单。您可以将元素设置为只读模式。@Komal onlytextboxes@Komal只读for按钮不会阻止用户单击它。请将元素的背景颜色保留为其默认控件或者你想要的任何其他颜色。好吧,由表单设计师,我手动设置按钮的前底色为白色,背景色为钢蓝色,当表单被禁用时,它仍然会使按钮的前底色变灰。DataGridView标头也是如此。确定。是的,在这种情况下,您可能需要用所需的颜色重新绘制文本。您需要根据性能和复杂性分析这是否可以接受。我在回答中添加了相同的代码。@谢谢你的回答,遗憾的是,它仍然需要覆盖该表单中每个控件的绘制方法。例如,该图像应该放在pictureBox中?当窗体被禁用时,我应该在顶部显示这个图片框?没错。我将捕获所有鼠标输入。但也可能是因为你仍然可以用键盘在后台选择控件。