gpt4 book ai didi

winforms - 禁用元素的 NumericUpDown 背景颜色更改

转载 作者:行者123 更新时间:2023-12-02 19:29:06 25 4
gpt4 key购买 nike

在我的 winform 应用程序上,我尝试对必填字段进行颜色编码。在用户编辑时,当必填字段被填写时,背景变为浅绿色,如果必填字段为空,则背景为红色。某些字段的启用和禁用取决于其他字段中的输入,因此有时我需要禁用字段,并且应该完全禁用该字段(禁用彩色背景)。这是我的背景更改:

public static void UpdateBackgroundColor(this NumericUpDown control)
{
if (!control.Enabled)
{
control.BackColor = SystemColors.InactiveBorder;
return;
}

var inputValue = control.Value;

if (inputValue == 0)
{
control.BackColor = Color.Red;
return;
}
control.BackColor = Color.LightGreen;
}

类似的功能适用于 TextBox,并且工作正常,没有任何故障。但 NumericUpDown 行为不当。这是当字段为必填字段且为空时我看到的内容:

enter image description here

但是当该字段被禁用时,它会在其周围保留红色边框:

enter image description here

当背景为绿色并禁用时,也会发生同样的情况。

那么为什么会发生这种情况以及如何解决它?

UPD:根据 Han 的回答,我很快更新了我的代码,但这仍然不起作用。

    private static void SetBackgroundColor(this Control control, Color color)
{
control.BackColor = color;
foreach (Control childControl in control.Controls)
{
SetBackgroundColor(childControl, color);
}
}

我大致是这样使用它的:

numericUpDown1.Enabled = true;
numericUpDown1.SetBackgroundColor(Color.Red);
numericUpDown1.Enabled = false;
numericUpDown1.SetBackgroundColor(SystemColors.InactiveBorder);

尽管我浏览了 NUD 的所有子控件并更改了那里的背景颜色,但仍然在文本框周围获得该框架。还有其他想法吗?

干杯!!

最佳答案

NumericUpdown 是多个控件的组合。文本框位于 NUD 内部,并具有一像素偏移。因此,您会看到文本框的 BackColor 设置与外部 NUD 控件不同。问题的真正原因在代码片段中不可见,但此行为的重现是:

        numericUpDown1.BackColor = Color.Red;
numericUpDown1.Enabled = false;
numericUpDown1.Controls[1].BackColor = SystemColors.InactiveBorder;

您需要修复设置嵌套控件的 BackColor 的代码,无论它是什么样子。可能是 Controls 集合上的 foreach。

关于winforms - 禁用元素的 NumericUpDown 背景颜色更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13701789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com