在我的桌面窗体中有许多控件.一旦失go 焦点,我想将Focus&上的活动控件的 colored颜色 改回原来的 colored颜色 .

这是我的代码,

public BillingMetal(Billing _frm)
{
    this.frm = _frm;
    InitializeComponent();

    foreach (Control ctrl in this.Controls)
    {
        ctrl.GotFocus += ctrl_GotFocus;
        ctrl.LostFocus += ctrl_LostFocus;
    }
}

public void ctrl_LostFocus(object sender, EventArgs e)
{
    var ctrl = sender as Control;
    if (ctrl.Tag is Color)
        ctrl.BackColor = (Color)ctrl.Tag;
}

public void ctrl_GotFocus(object sender, EventArgs e)
{
    var ctrl = sender as Control;
    ctrl.Tag = ctrl.BackColor;
    ctrl.BackColor = Color.Red;
}

Actually this code is working but for the button only not for textbox, combobox or any other tools.

推荐答案

您的代码看起来基本没问题,但您需要确保同时迭代了Control树的所有子级(所有子级...).

combo, textbox etc in panel

public partial class BillingMetal : Form
{
    public BillingMetal()
    {
        InitializeComponent();
        foreach (var ctrl in IterateControls(Controls))
        {
            ctrl.GotFocus += (sender, e) =>
            { 
                if(sender is Control ctrl)
                {
                    ctrl.Tag = ctrl.BackColor;
                    ctrl.BackColor = Color.Red;
                }
            };
            ctrl.LostFocus += (sender, e) =>
            {
                if(sender is Control ctrl && ctrl.Tag is Color color)
                {
                    ctrl.BackColor = color;
                }
            };
        }
    }

Iterator

    IEnumerable<Control> IterateControls(Control.ControlCollection controls)
    {
        foreach (Control control in controls)
        {
            yield return control;
            foreach (Control child in IterateControls(control.Controls))
            {
                yield return child;
            }
        }
    }
}

Csharp相关问答推荐

在包含空项的列表上使用具有断言T的摘要表

我无法在Ubuntu下编译使用microsoft.extension.configurationbuilder jsonapi和mono mcs的c#应用程序

C#自定义字典与JSON(de—)serialize

如何删除文件的基础上嵌入的时间戳嵌入文件名

有没有办法在WPF文本框中添加复制事件的处理程序?

从c#列表中删除额外的对象&对象&>从ASP.NET WebForm返回json响应

C#EF Core WHERE IN LINQ FROM LIST WITH.CONTAINS不返回任何内容

在调整大小的控件上绘制

C#-从基类更新子类

在C#中,非静态接口方法的抽象和虚拟是冗余的吗?

错误CS1061';AuthenticationBuilder';不包含AddOpenIdConnect的定义

在扩展方法中,IEnumerable<;T>;不会转换为IEumerable<;T&>

实体框架-IsRequired()与OnDelete()

为什么C#/MSBuild会自发地为不同的项目使用不同的输出路径?

从Base64转换为不同的字符串返回相同的结果

当我手动停止和关闭系统并打开时,Windows服务未启动

在Unity C#中按键点击错误的参数

在.Net 8 Visual Studio 2022中启用本机AOT发布时发布失败

避免在特定区域中设置Visual Studio代码的自动格式

ASP.NET核心MVC|如何在控制器方法之间传递值