Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# btnClose设置为CausesValidation=false,但不起作用_C#_Winforms - Fatal编程技术网

C# btnClose设置为CausesValidation=false,但不起作用

C# btnClose设置为CausesValidation=false,但不起作用,c#,winforms,C#,Winforms,我的表单上有一个关闭按钮,我已将其设置为CausesValidation=false。但当我运行它并试图用ErrorProvider关闭它时,它实际上不允许我关闭。我甚至尝试添加到关闭例程errorProvider1.Clear()或errorProvider1.Dispose(),但在处理错误之前,仍然无法关闭表单 我发现,如果我循环所有控件并设置CausesValidation=false,那么即使存在任何错误,它仍然可以通过关闭表单按预期工作 private void btnAdd_

我的表单上有一个关闭按钮,我已将其设置为
CausesValidation=false
。但当我运行它并试图用ErrorProvider关闭它时,它实际上不允许我关闭。我甚至尝试添加到关闭例程
errorProvider1.Clear()
errorProvider1.Dispose(),但在处理错误之前,仍然无法关闭表单

我发现,如果我循环所有控件并设置
CausesValidation=false
,那么即使存在任何错误,它仍然可以通过关闭表单按预期工作

   private void btnAdd_Click(object sender, EventArgs e)
    {
        if (!this.ValidateChildren()) return;

        DoAddCommand();
    }

    private void DoAddCommand()
    {
        //input
        string input1 = textBox1.Text;
        string input2 = textBox2.Text;
        //process
        this.ValidateChildren();
        decimal sum = Class1.Add(input1, input2);

        //output
        lblSum.Text = sum.ToString();
    }

    private void textBoxNumberEntry_Validating(object sender, System.ComponentModel.CancelEventArgs e)
    {
        TextBox textBox = sender as TextBox;
        decimal number1 = 0;

        try
        {
            number1 = decimal.Parse(textBox.Text);
            errorProvider1.Clear();
        }
        catch (FormatException)
        {
            errorProvider1.SetError(textBox, "Enter a valid number");
            e.Cancel = true;
        }
    }

    private void btnClose_Click(object sender, EventArgs e)
    {
        foreach (Control item in this.Controls)
        {
            item.CausesValidation = false;
        }
        this.Close();
    }

尝试在
asp:Button
标记中添加这两个属性

CausesValidation="false"

UseSubmitBehavior="false"
CauseValidation
应该足够了,但我相信,因为您有一个服务器端的
OnCLick
事件,所以您还需要指定SubmitBehavior


Mario

最可能发生的情况是,在您尝试点击取消按钮时,其中一个文本框具有焦点,因此验证已经发生。您的解决方案通过检查控件并将CausesValidation属性设置回False来工作

一种简单的方法是关闭表单的自动验证属性:

private void btnClose_Click(object sender, EventArgs e)
{
  this.AutoValidate = AutoValidate.Disable;
  this.Close();
}

根据我的经验,最有效的方法是将控件上的ValidationGroup设置为不存在的验证组名称

**这是哈奇,所以**

<asp:LinkButton ID="DoSomethingButton" runat="server"
    ValidationGroup="NonExistent" 
    OnClientClick="return confirm('Are you sure you want to do something?');" 
    Text="Do something" 
    OnClick="DoSomething_Click">
</asp:LinkButton>


一个类似的问题让我想到了这一点:在我的例子中,按钮的父控件(在我的例子中是一个面板)的CausesValidation设置为true;如果将其设置为false,则可以在未经验证的情况下触发按钮的单击。

对于任何对此感到愤怒的人,我刚才也遇到了同样的问题。 只需将按钮设置为使用:data validate target=“无”

data validate target是您在aspx验证控件(如required等)上查找的标记,该控件一旦失去焦点,就会在客户端触发


现在为我工作

-1问题是关于Windows窗体,而不是ASP.NET。尽管最初的问题是关于Windows窗体,但我发现此解决方案对ASP.NET中的类似情况很有帮助。这就是我所寻找的。感谢您解释为什么需要UseSubmitBehavior属性。我不知道。