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属性。我不知道。