我尽可能详细描述吧:
我有 "1" 个 TextBox,和 "1"个 CheckBox 还有一个 "Button"
1,当我 的 Button Click的时候,我想触发一个事件A(事件A是根据 TextBox的文本改变触发的).
2,所以后来我想在 "CheckBox"的 "Checked"属性为 "true"的时候, "TextBox"文本改变时也发生 事件A.所以我这样写:
private void txtInteger_TextChanged(object sender, EventArgs e) { //TextBox事件.
btnConvert_Click(sender, e); //Button事件.
}
但是问题来了...如果用户把 "CheckBox" 的属性 "Checked"设置为 "false"这时怎么取消哈?
也就是说,用户应该根据需要,是要"实时性"地让 TextBox触发和 Button的 Click事件,还是只能 通过 Button触发...
这个大家都应该做过的吧...怎么做比较好点...是不是要通过委托...?
以上是测试代码
将checkBox默认设置为true.
这是界面
追问大哥,你好像没有认真测试过哦.. 你再检查一下..貌似不行的...其实开始我就好像这么做了...这样是控制不了的...也就是说.
private void textBox1_TextChanged(object sender, EventArgs e)
{
button1_Click(sender,e);
}
是不能在你的checkBox1_CheckedChanged()事件中控制...
我测试的没问题啊,选中时,在文本框中输入,会弹出对话框,也就是单击事件中的代码,如图:
如果取消复选框选中状态,不会触发,效果如下:
-------------------------------------------------------------------------------
我对你的话的理解是:用复选框的选中状态来确定是否让文本框具备TextChanged事件(而TextChanged事件中又模拟了单击事件,所以复选框的选中状态间接控制着单击事件中的代码执行)。我上面的代码的意图是->1.选中复选框时:在文本框输入字符会触发TextChanged事件,进而模拟执行了单击事件;2.没有选中复选框时:在文本框输入字符时不会触发TextChanged事件(因为TextChanged事件已被取消),继而不会执行单击事件中的代码。
我测试的代码是没有一点问题的,你看一下我是否正确理解了你的意图,如果你也是这样想的,那你就得再看看你的代码是不是哪里出了问题!
if (checkBox1.Checked)
textBox1.TextChanged += new EventHandler(textBox1_TextChanged);
else xxxx
这个不是每次都new出来的么...也就是说,会不会是取消的不是同一件事.. 我的想法就是你说的哈..
是重新委托了,但是传递的是(textBox1_TextChanged这同一函数哦
略不清楚。。试着理解。大概的意思是,
1、你textbox的textchanged事件,textbox的值改变的时候能触发
2、自己按下按钮的时候也能触发。
3、而checkbox是可以控制1和2点能否触发,相当于一个总开关。如果是这样的话。你只要这么写就可以了。。
//先写个函数,这个函数代表这个事件具体要做的事情你这样的方式,思想就是让"Button"的Click 和 TextChecked去做同样的一件事...是可以的...请问...我好像用委托...
就像楼下 "fujie724"的方式...这么做哈...?你知道么...
简单方法能解决问题。。为什么还要去用复杂的。。
而且复杂的方法也不一定适用你这个问题。。
委托在这里并不合适。。
我知道..想熟练一下委托...
还有的是...我们不要 高兴太早哦...因为这种做法还是会有漏洞的...所以我觉得...可能像楼下说的..委托...才行..因为..如果 CheckBox checked为false时,按钮也不管用...其实..我见很多地方..都可以用委托...只是很多人不会用..所以觉得难而已...
这个我想过..但是我学 委托不久...事件的注册用得不得很随意...不怎么会..