突出显示绑定控制验证失败

时间:2014-05-15 17:54:19

标签: c# .net winforms validation .net-4.5

如果验证失败,我如何突出显示(即: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;
}

注意:

  • 由于绑定了TextBoxDataSet会执行验证检查。
  • 表单AutoValidate属性为EnableAllowFocusChange,以允许用户继续填写表单。
  • TextBox.Validating事件发生在DataSet执行数据验证之前,因此我无法在此处查看。
  • 验证失败不会发生TextBox.Validated事件,因此我无法从此处突出显示控件。
  • 似乎没有ValidationFailed事件。

可能的(可能是坏的)方法:

  1. TextBox.TextChanged上,为表单致电this.Validate()。但是,这会检查所有控件,而不仅仅是这个控件。
  2. 禁用所有控件的CausesValidation。通过启用CausesValidation并调用表单this.Validate()方法,检查特定控件的验证。这似乎太复杂了,无法成为一个合适的解决方案。
  3. 编写我自己的验证检查。这似乎是多余的和不必要的,因为它可能与DataSet数据验证不完全匹配。
  4. TextBox.Validating设置短背景计时器。在TextBox.Validated取消计时器。在Timer.Expired上,设置背景颜色。这种方法绝对是一种破解,但可能会完成工作。
  5. 使用键入的DataSetDataTableDataRowDataColumn的某种方法来明确检查验证? (......还没有发现任何相关的内容)。
  6. 我在网上搜索过。我已经挖掘了TextBoxDataSetBindingSource以及其他相关选项的方法,属性和事件。我完全不知道如何实现看似简单的任务。

1 个答案:

答案 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;
}