使用www.example.com变更winforms中所有文字字段的焦点项目背景色彩vb.net

ia2d9nvy  于 2022-11-17  发布在  .NET
关注(0)|答案(1)|浏览(116)

我开发了一个完整的应用程序,在30多个窗体中有500多个控件,设置每个控件的背景颜色不是一个好主意。有没有自动实现的方法?

5lwkijsr

5lwkijsr1#

您可以创建自己的文本框控件(例如TextBoxEx),然后使用编辑器的替换功能将源代码中所有TextBox替换为TextBoxEx。请确保设置“区分大小写”和“全字匹配”。
将此控件放置在System.Windows.Forms命名空间中将使搜索替换更容易。

namespace System.Windows.Forms;

public class TextBoxEx : TextBox
{
    private static Color FocusColor = Color.FromArgb(255, 255, 128);
    private static Color DefaultBackColor = Color.White;

    protected override void OnEnter(EventArgs e)
    {
        BackColor = FocusColor;
        base.OnEnter(e);
    }

    protected override void OnLeave(EventArgs e)
    {
        BackColor = DefaultBackColor;
        base.OnLeave(e);
    }
}

当窗体失去焦点时,具有焦点的文本框将保持其焦点颜色。如果希望在窗体失去焦点时恢复默认背景颜色,请重写OnGotFocusOnLostFocus
或者,您可以在表单失去焦点时指定较弱的焦点色彩,如下所示:

namespace System.Windows.Forms;

public class TextBoxEx : TextBox
{
    private static Color FocusColor = Color.FromArgb(255, 255, 128);
    private static Color WeakFocusColor = Color.LightYellow;
    private static Color DefaultTextBackColor = Color.White;

    private bool _isFocused;

    protected override void OnEnter(EventArgs e)
    {
        _isFocused = true;
        base.OnEnter(e);
    }

    protected override void OnLeave(EventArgs e)
    {
        _isFocused = false;
        base.OnLeave(e);
    }

    protected override void OnGotFocus(EventArgs e)
    {
        BackColor = FocusColor;
        base.OnGotFocus(e);
    }

    protected override void OnLostFocus(EventArgs e)
    {
        if (_isFocused) {
            BackColor = WeakFocusColor;
        } else {
            BackColor = DefaultTextBackColor;
        }
        base.OnLostFocus(e);
    }
}

相关问题