如果验证失败,我如何突出显示(即:BackColor
)绑定TextBox
?
换句话说,我想要这样的东西:
private void myTextBox_AfterCheckingValidation( object sender, EventArgs e )
{ // Which event would this be?
if ( theValidationFailed ) // <-- how do i get this?
myTextBox.BackColor = Color.Red;
else
myTextBox.BackColor = Color.Empty;
}
......或类似的东西
private void myTextBox_TextChanged(object sender, EventArgs e)
{
bool vStatus = myTextBox.Validate(); // <-- How could I acheive this?
if (vStatus)
myTextBox.BackColor = Color.Red;
else
myTextBox.BackColor = Color.Empty;
}
注意:
TextBox
,DataSet
会执行验证检查。AutoValidate
属性为EnableAllowFocusChange
,以允许用户继续填写表单。TextBox.Validating
事件发生在DataSet
执行数据验证之前,因此我无法在此处查看。TextBox.Validated
事件,因此我无法从此处突出显示控件。ValidationFailed
事件。可能的(可能是坏的)方法:
TextBox.TextChanged
上,为表单致电this.Validate()
。但是,这会检查所有控件,而不仅仅是这个控件。CausesValidation
。通过启用CausesValidation
并调用表单this.Validate()
方法,检查特定控件的验证。这似乎太复杂了,无法成为一个合适的解决方案。DataSet
数据验证不完全匹配。TextBox.Validating
设置短背景计时器。在TextBox.Validated
取消计时器。在Timer.Expired
上,设置背景颜色。这种方法绝对是一种破解,但可能会完成工作。DataSet
,DataTable
,DataRow
或DataColumn
的某种方法来明确检查验证? (......还没有发现任何相关的内容)。我在网上搜索过。我已经挖掘了TextBox
,DataSet
,BindingSource
以及其他相关选项的方法,属性和事件。我完全不知道如何实现看似简单的任务。
答案 0 :(得分:1)
您的问题是没有直接位置来更新TextBox
的颜色。
实际验证是由一些自动生成的代码完成的,因此大部分都是不可访问的。
有一个预验证事件&amp;验证成功的事件。 (Validating
&amp; Validated
)。但不是&#34; 失败的验证&#34;事件
您提出的解决方案 3&amp; 4 似乎最好。
对于 3 ,您可以创建自己的验证器,并让它重复使用DataSet
的验证逻辑。由于逻辑很难找到,并且您正在将验证与表示代码合并,因此这可能很混乱。
对于 4 ,您可以使用Validating
事件将颜色设置为红色。 (假设失败)。然后在Validated
事件中,将颜色设置为清除。这解决了主要问题,即没有明确的 Failed Validation &#34;事件。 (可能的缺点是,如果你需要执行&#34;繁重的任务。这里,它只是一个属性更改,这不应该导致重绘,直到验证完成。
编辑:最终守则(史蒂文)
private void myTextBox_Validating(object sender, CancelEventArgs e)
{
myTextBox.BackColor = Color.Red;
}
private void weightTextBox_Validated(object sender, EventArgs e)
{
myTextBox.BackColor = Color.Empty;
}