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

2023-12-11

在我的 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 的所有子控件并更改了那里的背景颜色,但仍然得到文本框周围的框架。还有其他想法吗?

Cheers!!


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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

禁用元素的 NumericUpDown 背景颜色更改 的相关文章

  • 由于 EndpointDispatcher 上的 AddressFilter 不匹配,无法在接收方进行处理

    我正在使用启用 ajax 的 WCF 当我在 Web 浏览器中打开 url 时 出现此错误 带有 Action 的消息http localhost 22219 MobileService svc GetProductCategories h
  • Windows 窗体:显示自适应省略号的单元格换行模式

    我正在使用 Windows 窗体 Datagridview 来显示一些 长 文本 代码是PowerShell 但问题与Cell Wrapping模式有关 TestGridView New Object System Windows Form
  • 如何有效地测试action是否用属性(AuthorizeAttribute)修饰?

    我正在使用 MVC 并且有一种情况OnActionExecuting 我需要确定即将执行的Action方法是否用属性修饰 AuthorizeAttribute尤其 我不是问授权是否成功 失败 而是问该方法是否需要授权 对于非 MVC 人员
  • C# - Winamp 风格 3 窗口捕捉应用程序

    如何在 C 和 net 2 0 中创建 Winamp 风格的多表单捕捉应用程序 Easy 创建三个表格 添加代码以自定义绘制一切在这三种形式上 添加逻辑来处理用户在任何表单上的任意位置单击和拖动 以便窗口正常移动 直到它与您自己的另一个表单
  • 我们可以向 ServicePointManager.SecurityProtocol 添加四个协议吗?

    我想支持从 ssl3 到 tls 1 2 的所有安全协议 但是在网上搜索时我发现代码为 ServicePointManager SecurityProtocol SecurityProtocolType Ssl3 SecurityProto
  • C#4做COM的时候需要调用Marshal.ReleaseComObject吗?

    我有 VS2010 并向我的项目添加了对 COM 库的引用 并且 VS 在项目中嵌入了主要互操作 如果我引用COM库中的对象并且我想快速处理它们而不等待GC 是否需要调用ReleaseComObject Marshal ReleaseCom
  • Word Automation - 文件正在被其他应用程序或用户使用

    我有一个 WinForms 应用程序 我在其中使用 Word Automation 通过模板构建文档 然后将它们保存到数据库中 创建文档后 我从数据库检索文档 将其写入文件系统的临时目录中 然后使用 Word Interop 服务打开该文档
  • sandcastle 未解决的装配参考

    我正在尝试使用 sandcastle 帮助文件生成器生成文档 在沙堡中构建项目时 我收到以下错误 MRefBuilder error Unresolved assembly reference Microsoft Owin Microsof
  • 从任务并行库更新 ProgressBar UI 对象

    基本上我想更新 FormMain WindowsForm 上的 ProgressBar UI 对象 我正在使用 NET 4 0 以下是 Form1 Designer cs 中的代码 namespace ProgressBarApp publ
  • 基本 WinForm KeyDown 事件处理

    我正在使用 WinForms 我已经为KeyDown主窗体的事件 从而调用按钮的Click事件处理程序 The Click调用的事件处理程序取决于按下的特定键 如果用户单击该按钮而不是使用该键 然后随后尝试使用该键 则该键 例如向下箭头 将
  • 如何实现快捷键的键盘处理程序cefSharp

    我正在构建一个用于浏览网页的 Windows 应用程序cefSharp 我需要在该应用程序中实现一些快捷键 任何人都可以告诉我如何实现此功能 Ex ctrl tab move to next tab 我能够跟踪用户是否按下任何单个键 但无法
  • 在 DataGridView 中隐藏行非常慢

    我在 Winforms 应用程序中有一个 DataGridView 大约有 1000 行 未绑定 和 50 列 隐藏一列需要整整 2 秒 当我想隐藏大约一半的行时 这就成为一个问题 private void ShowRows string
  • WinForms - 表单大小错误

    我们有以下代码 private void MainForm Shown object sender EventArgs e RepositionForm private void RepositionForm Rectangle rect
  • WinForms 中的 EF:如何过滤 BindingSource/DGW 中的数据 (.Local.ToBindingList())

    我按照本教程生成了 EF 模型 首先是数据库 和数据源http msdn microsoft com en us data jj682076 aspx http msdn microsoft com en us data jj682076
  • 按比例调整图片框的大小以调整表单大小

    我希望每次 用户调整表单的大小 图片框中的图像也使用相同的值 按比例 调整大小 我在互联网上搜索了一些代码并在中找到了这个答案堆栈溢出 https stackoverflow com a 6501997 3264464 https stac
  • 如何获取Winforms窗体标题栏高度的大小?

    因此 如果它是工具窗口或可最小化的表单 我希望能够以编程方式获取其高度 这可能吗 如果是这样怎么办 您可以使用以下方法确定工具窗口和普通表单的标题栏高度 Rectangle screenRectangle this RectangleToS
  • 设置 Form.KeyPreview = true 的缺点?

    我想知道 Form KeyPreview 属性实际上有什么用处 它为什么存在以及将其设置为 true 会带来什么 风险 我想它一定有some负面影响 否则它根本不应该存在 或者至少默认情况下是正确的 EDIT 我很清楚what确实如此 我问
  • 删除DataGridView(表)中的多行

    我有一个数据表 myTable 它与 DataGridView dgv 绑定 DataGridView dgv 有一个复选框列 我的目标是删除在按钮事件中选中的行 数据表当然会更新 现在我的代码仅适用于删除一行 不适用于多行 感谢帮助 pr
  • 什么时候值得使用 BindingSource?

    我想我非常了解 BindingSource 类的作用 即在数据源和 UI 控件之间提供一个间接层 它实现了 IBindingList 接口 因此还提供了对排序的支持 而且我已经经常使用它 没有太多问题 但我想知道我使用它的频率是否超过了应有
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co

随机推荐