C# System.Windows.Forms.Panel.Enabled=假颜色过载?

C# System.Windows.Forms.Panel.Enabled=假颜色过载?,c#,.net-2.0,C#,.net 2.0,我在一个Windows应用程序中有一个System.Windows.Forms.Panel控件,该控件在面板中有许多标签和文本框。当您调用Panel.Enabled=false命令时,所有文本框和标签都变为灰色,并变得不可编辑,这是所需的效果。当面板被禁用时,有没有办法使浅灰色过载 使用的解决方案: 由于禁用时无法覆盖禁用的颜色,因此以下仅用于禁用面板上的文本框和标签,而不是空白面板。Enabled=false //Loop through the Member info Panel and f

我在一个Windows应用程序中有一个System.Windows.Forms.Panel控件,该控件在面板中有许多标签和文本框。当您调用Panel.Enabled=false命令时,所有文本框和标签都变为灰色,并变得不可编辑,这是所需的效果。当面板被禁用时,有没有办法使浅灰色过载

使用的解决方案:

由于禁用时无法覆盖禁用的颜色,因此以下仅用于禁用面板上的文本框和标签,而不是空白面板。Enabled=false

//Loop through the Member info Panel and find all the group boxes 
foreach (Control cItem in Panel.Controls)
{
    //A group box is found 
    if (cItem is GroupBox)
    {
        //Loop through all the group box components
        foreach (Control cSubItem in cItem.Controls)
        {
            //If its a label of text box disable it
            if (cSubItem is TextBox || cSubItem is Label) 
            { 
                cSubItem.Enabled = false; 
            }
        }
    }
}

当标签和文本框被禁用时,无法对它们的颜色进行覆盖覆盖。但您可以在禁用包含面板后覆盖每个控件,并将其设置为适当的颜色

禁用时,TextBox类(更具体地说是TextBoxBase类)更喜欢显式颜色,而不是默认的灰色


不久前我写了一篇关于如何实现这一效果的博文:

当标签和文本框被禁用时,无法全面覆盖它们的颜色。但您可以在禁用包含面板后覆盖每个控件,并将其设置为适当的颜色

禁用时,TextBox类(更具体地说是TextBoxBase类)更喜欢显式颜色,而不是默认的灰色

不久前,我写了一篇关于如何实现这种效果的博文:

作为替代: 如果希望控件具有不同的启用/禁用颜色,则可以迭代使用面板注册的控件,并为其EnabledChanged事件分配自定义函数以更改其颜色(基于我假设的类型)。你可能想过滤你用它修改的控件类型,但我相信你可以用它来实现你的目标

更新: 试试这个:
public void取消选择(对象发送方,事件参数e)
{
foreach(此.Controls中的控件c)
{
//TODO:检查控件类型并更改背景色
}
}
这将需要放置在表单类中,然后您可以在事件中使用它。希望有帮助。

作为替代方案: 如果希望控件具有不同的启用/禁用颜色,则可以迭代使用面板注册的控件,并为其EnabledChanged事件分配自定义函数以更改其颜色(基于我假设的类型)。你可能想过滤你用它修改的控件类型,但我相信你可以用它来实现你的目标

更新: 试试这个:
public void取消选择(对象发送方,事件参数e)
{
foreach(此.Controls中的控件c)
{
//TODO:检查控件类型并更改背景色
}
}

这将需要放置在表单类中,然后您可以在事件中使用它。希望这能有所帮助。

我一直在寻找可以反复讨论的逻辑。这个面板不需要一个子集合,所以我打算在表单级别进行迭代,这样可以工作,但需要弄清楚主父节点是什么。我一直在寻找迭代的逻辑。这个面板不需要一个子集合,所以我打算在表单级别进行迭代,这将起作用,但需要弄清楚主父节点是什么。