我有一个我们在内部使用的 winform 应用程序。它的 25 个“页面”(用户控件)中的每一个都有许多单独的控件。我们的用户群更喜欢非常彩色的应用程序......如果它是必填字段,他们希望文本框的轮廓为蓝色(如果输入数据,颜色应该消失)。如果其中的数据已更改以提醒他们保存,他们希望 TextBox 更改为轮廓绿色。他们希望当前突出显示的 TextBox 的轮廓为 RedOrange。
我一直试图从许多不同的角度来解决这个问题(你们中的一些人最近可能看到过我的类似帖子)。它们都不起作用......所以我知道的一种方法是为每个控件注册绘画事件并检查所需部分的“必需”标签。当前字段部分的 OnFocus,最后是数据更改部分的 Validate 事件。
我知道这不是最好的方法,或者至少我强烈怀疑它不是,但我已经没时间了,快到我的挫折点了。话虽这么说,这会破坏我的应用程序的响应能力吗?有没有更好的办法?我能否覆盖基本控件以在不同的前提下着色,这样我就不必去访问 100 多个控件中的每一个?
任何想法都会受到欢迎,因为我在愚蠢的 Paint_Event 想法和重写 WPF 中的所有控件之间...:)
我将奖励对我有用并且我可以通过赏金很快实现的解决方案。
我厌倦了颜色......
这是我基于建议的尝试。
public class MyTextBox : TextBox
{
private bool _isRequired;
public bool isRequired
{
get
{
return _isRequired;
}
set
{
_isRequired = value;
}
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if (isRequired && base.Text.Equals(string.Empty))
{
HighlightControl(e.Graphics);
}
}
private void HighlightControl(Graphics graphics)
{
ControlPaint.DrawBorder(
graphics,
this.ClientRectangle,
Properties.Settings.Default.RequiredFieldColor,
Properties.Settings.Default.BorderWidth,
Properties.Settings.Default.BorderStyle,
Properties.Settings.Default.RequiredFieldColor,
Properties.Settings.Default.BorderWidth,
Properties.Settings.Default.BorderStyle,
Properties.Settings.Default.RequiredFieldColor,
Properties.Settings.Default.BorderWidth,
Properties.Settings.Default.BorderStyle,
Properties.Settings.Default.RequiredFieldColor,
Properties.Settings.Default.BorderWidth,
Properties.Settings.Default.BorderStyle);
}
}
最佳答案
我不知道您的应用程序的细节,但您可以从基础 TextBox 派生您自己的控件并让它为您处理大部分内容。一些想法:
给它一个 bool 必需属性和一些内部逻辑来相应地着色。
让文本框响应它自己的 事件 - 输入文本时,它可以 做正确的事 - 改变颜色或 任何合适的。
为您的派生控件提供 设置颜色的属性 用于每个条件,那么你可以 用户轻松切换它们 决定他们想要粉红色而不是 绿色。
您可以利用焦点事件“知道”您的 TextBox(这是您提到的那个控件,所以我假设这是这里使用的主要控件)是否获得焦点或失去焦点以及文本更改事件可用于驱动控件的所有颜色变化。
你当然可以连接所有的 文本框来控制 应用/确定/任何按钮 确定按钮是否应该 已启用,假设您有一个应用按钮或类似的东西,可以在点击时存储数据。有很多方法可以传达这一点。遍历控件并询问它们的状态非常容易。
看起来这样就可以了。
你试过什么?您并没有真正提到您尝试过但没有奏效的方法。
关于c# - 如何继承基本文本框以提供彩色边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2245047/