我在应用程序中有一个用户表单。某些字段已验证。如果字段的值错误,则会为此控件绘制红色边框。它是通过处理制成的Paint
该控件的事件。我延长了TextField
and DateTimePicker
to get Paint
来自这些类对象的事件。我有问题NumericUpDown
班级。它确实会火Paint
事件正确但调用
ControlPaint.DrawBorder(e.Graphics, eClipRectangle, Color.Red, ButtonBorderStyle.Solid);
完全没有做任何事情。有什么想法或建议吗?如果我找不到任何方法来做到这一点,我会添加一个面板来容纳NumericUpDown
控件,我将更改其背景颜色。
每次处理程序连接到Paint
我打电话的事件control.Invalidate()
重新粉刷它。
尝试这个:
public class NumericUpDownEx : NumericUpDown
{
bool isValid = true;
int[] validValues = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if (!isValid)
{
ControlPaint.DrawBorder(e.Graphics, this.ClientRectangle, Color.Red, ButtonBorderStyle.Solid);
}
}
protected override void OnValueChanged(System.EventArgs e)
{
base.OnValueChanged(e);
isValid = validValues.Contains((int)this.Value);
this.Invalidate();
}
}
假设您的值是 int 类型而不是十进制。您的有效性检查可能会有所不同,但这对我有用。如果新值不在定义的有效值中,它将在整个 NumbericUpDown 周围绘制红色边框。
诀窍是确保你画了边框after调用base.OnPaint。否则边界将会被拉过。从 NumericUpDown 继承可能比分配给其绘制事件更好,因为重写 OnPaint 方法可以让您完全控制绘制顺序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)