C#..窗体问题,关于..控制 TextBox的"TextChanged"事件...怎么做...

我尽可能详细描述吧:
我有 "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触发...
这个大家都应该做过的吧...怎么做比较好点...是不是要通过委托...?

 private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
      if (checkBox1.Checked)
          this.textBox1.TextChanged += new EventHandler(textBox1_TextChanged);
      else
          this.textBox1.TextChanged -= new EventHandler(textBox1_TextChanged);
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
    button1_Click(sender,e);
}
private void button1_Click(object sender, EventArgs e)
{
      MessageBox.Show("test");
}

以上是测试代码

将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个回答  2013-06-09

略不清楚。。试着理解。大概的意思是,

1、你textbox的textchanged事件,textbox的值改变的时候能触发

2、自己按下按钮的时候也能触发。

3、而checkbox是可以控制1和2点能否触发,相当于一个总开关。如果是这样的话。你只要这么写就可以了。。

//先写个函数,这个函数代表这个事件具体要做的事情
private void DoEvent()
{
    //判断checkbox是否选中,如果没选中就直接退出函数不做后面的事了
    if(checkBox.Checked == false)
        return;
    //后面这里写具体要做的,比如计算什么,或者弹个窗,或者读数据库。
    //MessageBox.Show("事件触发了!");
    //....
}

private void txtInteger_TextChanged(object sender, EventArgs e) 
{
    DoEvent();
}

private void button1_Click(object sender, EventArgs e) 
{
    DoEvent();
}

追问

你这样的方式,思想就是让"Button"的Click 和 TextChecked去做同样的一件事...是可以的...请问...我好像用委托...
就像楼下 "fujie724"的方式...这么做哈...?你知道么...

追答

简单方法能解决问题。。为什么还要去用复杂的。。
而且复杂的方法也不一定适用你这个问题。。
委托在这里并不合适。。

追问

我知道..想熟练一下委托...
还有的是...我们不要 高兴太早哦...因为这种做法还是会有漏洞的...所以我觉得...可能像楼下说的..委托...才行..因为..如果 CheckBox checked为false时,按钮也不管用...其实..我见很多地方..都可以用委托...只是很多人不会用..所以觉得难而已...

第2个回答  2013-06-09
触发事件用的是+=,取消事件触发是-=追问

这个我想过..但是我学 委托不久...事件的注册用得不得很随意...不怎么会..

相似回答