C# 验证失败时突出显示绑定控件

C# 验证失败时突出显示绑定控件,c#,.net,winforms,validation,.net-4.5,C#,.net,Winforms,Validation,.net 4.5,验证失败时,如何突出显示绑定的文本框(即:BackColor) 换句话说,我想要的是: private void myTextBox_AfterCheckingValidation( object sender, EventArgs e ) { // Which event would this be? if ( theValidationFailed ) // <-- how do i get this? myTextBox.BackColor = Color.R

验证失败时,如何突出显示绑定的
文本框(即:
BackColor

换句话说,我想要的是:

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\u检查验证后(对象发送方,事件参数e)
{//这将是什么事件?

如果(验证失败)//您的问题是没有直接的位置来更新
文本框的颜色

实际的验证是由一些自动生成的代码完成的,因此大部分是无法访问的。 存在验证前事件和验证成功事件。(
验证
&
验证
),但不存在“验证失败”事件

您提出的解决方案中,3和4似乎是最好的

对于3,您可以创建自己的验证器,并让它重用
数据集的验证逻辑。这可能会很混乱,因为很难找到逻辑,而且您正在将验证与表示代码合并

对于4,您可以使用
Validating
事件将颜色设置为red(假设失败)。然后在
Validated
事件上,将颜色设置为clear。这解决了主要问题,即没有明确的“失败的验证”事件。(如果需要执行“重验证”,则可能存在缺点)在这里,这只是一个属性更改,在验证完成之前不应导致重新绘制

编辑:最终代码(史蒂文)


我们无法为您编写程序。您需要做一些研究,编写一些代码,当您遇到更具体的问题时,再回来发布一些内容。如果不具体介绍WinForms,我的做法是为验证器创建一个接口,在表单中为其创建一个字段,在每次输入时调用验证方法(使用事件)根据返回值更改背景颜色。您声明数据集处理验证。您在数据集中进行了什么样的验证,您是否考虑使用业务层?<代码>数据集< /代码>必须执行某种类型的隐式验证,以知道<代码>文本框>文本< /代码>是否是STO的有效数值。re在数据库列中。验证检查本身是在后台某处执行的(我假设代码是由数据集设计器生成的)。3和4似乎没有问题。3->您需要自己编写,因为它需要更新颜色(默认颜色,并将其包装?).4->为什么要使用计时器。假设失败,验证设置为红色。验证设置为清除。选项4:简单、直接。编辑答案以包含我的代码。
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;
}
private void myTextBox_Validating(object sender, CancelEventArgs e)
{
    myTextBox.BackColor = Color.Red;
}

private void weightTextBox_Validated(object sender, EventArgs e)
{
    myTextBox.BackColor = Color.Empty;
}