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

我尽可能详细描述吧:我有"1"个TextBox,和"1"个CheckBox还有一个"Button"1,当我的ButtonClick的时候,我想触发一个事件A(事件A是根据... 我尽可能详细描述吧:
我有 "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触发...
这个大家都应该做过的吧...怎么做比较好点...是不是要通过委托...?
展开
 我来答
Onewarden
推荐于2016-08-23 · TA获得超过327个赞
知道小有建树答主
回答量:145
采纳率:100%
帮助的人:140万
展开全部
 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事件已被取消),继而不会执行单击事件中的代码。

 

我测试的代码是没有一点问题的,你看一下我是否正确理解了你的意图,如果你也是这样想的,那你就得再看看你的代码是不是哪里出了问题!

fujie724
2013-06-09 · TA获得超过1187个赞
知道小有建树答主
回答量:154
采纳率:100%
帮助的人:272万
展开全部

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

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"的方式...这么做哈...?你知道么...
追答
简单方法能解决问题。。为什么还要去用复杂的。。
而且复杂的方法也不一定适用你这个问题。。
委托在这里并不合适。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
迦若青蓝
2013-06-09 · TA获得超过177个赞
知道小有建树答主
回答量:347
采纳率:0%
帮助的人:164万
展开全部
触发事件用的是+=,取消事件触发是-=
追问
这个我想过..但是我学 委托不久...事件的注册用得不得很随意...不怎么会..
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式