C# Winform 如何阻止事件继续,急.急.急
我有一个页面上做资料编辑的,如果用户编辑资料后未保存,就点击其他功能按钮(如Button2~Button99),便提示是否保存的对话框,如果用户选择"取消",则应继续停留在该界面.我的问题是,当用户点击Button2~Button99中的某一个时,如果用户选择了"取消",我如何能不执行Button2~Button99的事件呢?
--------------------编程问答-------------------- return; --------------------编程问答-------------------- javascript:return confirm('您确实要删除此项吗?'); --------------------编程问答--------------------
我这是winform --------------------编程问答--------------------
在哪里写return,我不可能在Button2~Button99的处理事件中,都对这个资料编辑窗体结果做一个判断. --------------------编程问答-------------------- 不知道可不可以用Form自身的Validating事件来阻止,但Form的Validating事件总是不触发,怎样能触发这个事件呢? --------------------编程问答-------------------- 我感觉不是用 Form 的事件吧,另外你试试看 Deactive 事件,这个东西“设计器”里面没有,你要手写 += ,试试行么
--------------------编程问答--------------------
if (MessageBox.Show("确定要打印吗?", "询问", MessageBoxButtons.YesNo) == DialogResult.Yes)--------------------编程问答--------------------
{}
我也是这个方法
DialogResult dlgResult = MessageBox.Show("您确定要继续吗?", "确认信息", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning); ;
if (dlgResult == DialogResult.OK)
{
//继续
}
else
{
//不继续
} --------------------编程问答--------------------
--------------------编程问答-------------------- 你怎么调用的 Button2~Button99 的,在调用之前return。 --------------------编程问答-------------------- return --------------------编程问答-------------------- 哦认为在对应的事件处理方法中个对应事件的 e参数,如这个
if (MessageBox.Show("确定要打印吗?", "询问", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
//继续
}else
{
//不继续
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
}
搞这个e的一些属性,应该可以完成你的要求。
哦的思路是这样的~~
欢迎讨论!!!! --------------------编程问答--------------------
return并不能阻止其它button的事件继续 --------------------编程问答-------------------- 哦,明白你的意思。你想统一处理,还不想在每个Button里加代码。
--------------------编程问答--------------------
啥意思?每个button里都应该有return。代码怎么写的贴出来看看。 --------------------编程问答--------------------
楼主还有问题吗? --------------------编程问答-------------------- 简单得说,我希望在离开当前窗体(其实只是隐藏)前,弹出一个选择对话框:是/否/取消,如果选择"是" 或者 "否" ,则执行相关保存或不保存操作,然后继续执行后面所点击的按钮的事件,如果选择"取消",要求停留在当前窗体,也不执行后面点击的按钮的事件. --------------------编程问答-------------------- 有取消,全局变量为false,其他的判断是flase,return掉 --------------------编程问答-------------------- 你是怎么离开当前窗体的,如果取消了,就把离开当前窗体的代码不执行就好了 --------------------编程问答--------------------
是的. --------------------编程问答--------------------
用Validating事件的e.Cancel=true,确实可以实现停留在当前窗体的效果.但是如果选择了"是"或者"否",它似乎不知道后续事件是什么了,执行完Validating后,就不执行了.除非再次点击另一个Button --------------------编程问答-------------------- 对按钮事件进行退订,以后再进行订阅。
如this.Button1.Click -= new System.EventHandler(this.Button1_Click);
--------------------编程问答-------------------- 贴上一小段代码吧:
private void Form2_Validating(object sender, CancelEventArgs e)
{
//下面这句话很关键,如果无此代码,点击Button3,button3_Click会顺利执行,但是如果有此代码,button3_Click不会执行,为什么????
DialogResult result = MessageBox.Show("Test", "Info", MessageBoxButtons.YesNoCancel);
}
--------------------------------------------------
private void button3_Click(object sender, EventArgs e)
{
form2.Hide();
form3.Show();
}
--------------------编程问答-------------------- 好像弹出的对话框,阻断了Form2_Validating和button3_Click之间的连贯性 --------------------编程问答-------------------- 刚做了个小实验,页面上只放一个TextBox和一个Button,写了如下测试代码:
private void textBox1_Validating(object sender, CancelEventArgs e)
{
Console.WriteLine("textBox1_Validating");
MessageBox.Show("textBox1_Validating");
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("button1_Click");
}
如果把光标从TextBox离开,并点击Button,会输出"textBox1_Validating"并弹出"textBox1_Validating"对话框,不会弹出"button1_Click"对话框;
如果注释掉MessageBox.Show("textBox1_Validating"); 执行相同的测试,会输出"textBox1_Validating"并弹出"button1_Click"对话框.
我要的效果是两个对话框都要弹出,有什么办法吗? --------------------编程问答-------------------- 22楼的这样写,按钮就不起作用了,要调用的时候还得加回去 --------------------编程问答-------------------- 可以使用一个变量啊!如果保存了算一个状态,没保存的时候算一个状态,那你现在在点击button2-button99的时候判断下这个变量的状态就可以了啊!不知道能不能满足楼主的要求 --------------------编程问答--------------------
是关闭的时候吧?
private bool isExit = false;
private void Form_FormClosing(object sender, FormClosingEventArgs e)
{
if (!isExit)
{
DialogResult re = MessageBox.Show("确定要退出本系统吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
if (re == DialogResult.Yes)
{
e.Cancel = true;
isExit = true;
//隐藏窗体代码
}
else
{
e.Cancel = true;
}
}
}
不知道楼主是不是要这样的效果 我猜的~~ --------------------编程问答--------------------
要取消事件就将CancelEventArgs.Cancel设置为true
如果 CausesValidation 属性设置为 false,则将取消 Validating 和 Validated 事件。
如果在 Validating 事件委托中,CancelEventArgs 的 Cancel 属性设置为 true,则正常情况下将在 Validating 事件之后发生的所有事件均被取消。
http://msdn.microsoft.com/zh-cn/library/9ws52wzb(v=VS.80).aspx
补充:.NET技术 , C#