我开发了一个完整的应用程序,在30多个窗体中有500多个控件,设置每个控件的背景颜色不是一个好主意。有没有自动实现的方法?
5lwkijsr1#
您可以创建自己的文本框控件(例如TextBoxEx),然后使用编辑器的替换功能将源代码中所有TextBox替换为TextBoxEx。请确保设置“区分大小写”和“全字匹配”。将此控件放置在System.Windows.Forms命名空间中将使搜索替换更容易。
TextBoxEx
TextBox
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); } }
当窗体失去焦点时,具有焦点的文本框将保持其焦点颜色。如果希望在窗体失去焦点时恢复默认背景颜色,请重写OnGotFocus和OnLostFocus。或者,您可以在表单失去焦点时指定较弱的焦点色彩,如下所示:
OnGotFocus
OnLostFocus
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); } }
1条答案
按热度按时间5lwkijsr1#
您可以创建自己的文本框控件(例如
TextBoxEx
),然后使用编辑器的替换功能将源代码中所有TextBox
替换为TextBoxEx
。请确保设置“区分大小写”和“全字匹配”。将此控件放置在
System.Windows.Forms
命名空间中将使搜索替换更容易。当窗体失去焦点时,具有焦点的文本框将保持其焦点颜色。如果希望在窗体失去焦点时恢复默认背景颜色,请重写
OnGotFocus
和OnLostFocus
。或者,您可以在表单失去焦点时指定较弱的焦点色彩,如下所示: