在我的 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](https://i.stack.imgur.com/zG4jr.png)
但是当该字段被禁用时,它会在其周围保留红色边框:
![enter image description here](https://i.stack.imgur.com/0kyfI.png)
当背景为绿色并禁用时,也会发生同样的情况。
那么为什么会发生这种情况以及如何解决呢?
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 的所有子控件并更改了那里的背景颜色,但仍然得到文本框周围的框架。还有其他想法吗?
Cheers!!
NumericUpdown 是多个控件的组合。文本框位于 NUD 内部,并具有一像素偏移。因此,您会看到文本框的 BackColor 设置与外部 NUD 控件不同。问题的真正原因在代码片段中不可见,但此行为的重现是:
numericUpDown1.BackColor = Color.Red;
numericUpDown1.Enabled = false;
numericUpDown1.Controls[1].BackColor = SystemColors.InactiveBorder;
您需要修复设置嵌套控件的 BackColor 的代码,无论它是什么样子。可能是 Controls 集合上的 foreach。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)