我只是想知道是否可以轻松地将文本框的边距设置为特定颜色?我使用winforms
并且在我的验证事件处理程序中我有一系列error providers
,如果返回false,我想将边距设置为红色,如果成功为绿色。这有可能没有隐藏任何控件吗?我知道如何设置前景和面板颜色,但它似乎是如此草率,以至于必须将它全部隐藏在它背后。这是我的验证事件处理程序。
private void txt_LndLine_Validating(object sender, CancelEventArgs e)
{
if (utility.isNum,(txt_LndLine.Text))
{
epLandline.SetError(txt_LndLine, "Please use unknown Entity!!!");
return;
}
else
{
epLandline.Clear();
_IsValid = true;
}
}
只是一个查询,因为事件hadnler工作得很好,只是不会介意一种更聪明的方式来呈现错误而不是图标
答案 0 :(得分:0)
可能是评论中的答案很好(@RudyTheHunter)。
我有一个简单的方法。
将panel
控件放在text box
正下方,然后更改面板的边框颜色。
我试了一下,看起来如下图所示。
<强>代码:强>
if (utility.isNum,(txt_LndLine.Text))
{
epLandline.SetError(txt_LndLine, "Please use unknown Entity!!!");
//PANEL COLOR
this.panel1.BackColor = System.Drawing.Color.Green;
this.panel1.Padding = new System.Windows.Forms.Padding(5);
return;
}
else
{
epLandline.Clear();
//PANEL COLOR
this.panel1.BackColor = System.Drawing.Color.Red;
this.panel1.Padding = new System.Windows.Forms.Padding(5);
_IsValid = true;
}
答案 1 :(得分:0)
这是一个替代解决方案,不会添加任何额外的控件。它将边框绘制到TextBoxes
'Parent
。
通过将例程挂钩到Paint
的{{1}} TextBox
事件中来设置一次,可能是这样的:
Parent
现在,您可以设置textBox1.Parent.Paint += DrawMargins;
以保留您要使用的Tag
:
Brush
更改textBox1.Tag = Brushes.Red;
textBox2.Tag = Brushes.Green;
后需要触发例程,Brush
Invalidating
:
Parent
要从绘画中取出一个textBox1.Parent.Invalidate();
,请将TextBox
重置为Tag
:
null
你也可以解开整个事件:
textBox1.Tag = null;
这是绘图方法:
textBox1.Parent.Paint -= DrawMargins;
请注意,这适用于private void DrawMargins(object sender, PaintEventArgs e)
{
Control parent = sender as Control;
foreach ( Control ctl in parent.Controls)
{
SolidBrush brush = ctl.Tag as SolidBrush;
if (brush == null) continue;
e.Graphics.FillRectangle(brush, ctl.Left - ctl.Margin.Left,
ctl.Top - ctl.Margin.Top,
ctl.Width + ctl.Margin.Horizontal,
ctl.Height + ctl.Margin.Vertical);
}
}
中SolidBrush
并且是相同父级的子级的任何控件。如果某些控件是嵌套的,比如在Tag
或GroupBox中,我猜你应该用Panel
参与控件替换parent.Controls
集合上的循环。
我已经放大了第一个List<Control>
的左边距,你可以看到..