【问题标题】:How to trigger the CheckBox's unknown-name OnCheckedChanged even in c# and asp.net?如何在 c# 和 asp.net 中触发 CheckBox is unknown-name OnCheckedChanged 事件?
【发布时间】:2014-07-01 10:29:32
【问题描述】:

我写了一个函数,输入了一个复选框,但我什至不知道如何触发他的未知名称OnCheckedChanged。

代码如下:

private void ConEnable(CheckBox MyCheckBox, TextBox MyTextBox, bool MyBool) 
{
    MyCheckBox.Enabled = MyBool;
    MyTextBox.Enabled = MyBool;
    if (!MyBool) {// == false
        MyCheckBox.Checked = MyBool;
        MyTextBox.Text = "";
        //MyCheckBox.CheckedChanged += new EventHandler(...);
    }
}

//CheckBox2和CheckBox3的另一个OnCheckedChanged...:

protected void CheckBox2_CheckedChanged(object sender, EventArgs e) {
    ConEnable(CheckBox1, TextBox1, !CheckBox2.Checked);
    ConEnable(CheckBox3, CheckBox2.Checked);
    ConEnable(CheckBox4, TextBox8, TextBox9, CheckBox2.Checked);
    ConEnable(CheckBox5, CheckBox2.Checked);
    //if (!CheckBox2.Checked) {
    //  ConEnable(CheckBox6, TextBox3, false);
    //  ConEnable(CheckBox7, TextBox4, TextBox5, false);
    //  ConEnable(CheckBox8, TextBox6, TextBox7, false);
    //}
    SetResult1();
  }
  protected void CheckBox3_CheckedChanged(object sender, EventArgs e) {
    ConEnable(CheckBox4, TextBox8, TextBox9, !CheckBox3.Checked);
    ConEnable(CheckBox5, !CheckBox3.Checked);
    ConEnable(CheckBox6, TextBox3, CheckBox3.Checked);
    ConEnable(CheckBox7, TextBox4, TextBox5, CheckBox3.Checked);
    ConEnable(CheckBox8, TextBox6, TextBox7, CheckBox3.Checked);
    if (!CheckBox3.Checked) {
      ConEnable(CheckBox6, TextBox3, false);
      ConEnable(CheckBox7, TextBox4, TextBox5, false);
      ConEnable(CheckBox8, TextBox6, TextBox7, false);
    }
    SetResult1();
  }

我希望它可以触发甚至如下所示: 前任: 我取消选中 CheckBox2(CheckBox2 变为 false)->通过 ConEnable 函数触发 CheckBox2_CheckedChanged 和 CheckBox3 变为 false -> 在 ConEnable 中触发 MyCheckBox 的偶数(即 CheckBox3_CheckedChanged)。->CheckBox6 变为 false 并 触发 MyCheckBox甚至(即 CheckBox6_CheckedChanged) 在 ConEnable->........

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    键入:[Object Name].[Event]+=,然后按两次 Tab 创建事件的方法。

    附:对象名称与对象类型不同

    【讨论】:

      【解决方案2】:

      如果我正确理解您的问题,您将很难理解如何知道哪个复选框触发了事件。

      在下面的代码中,您可以看到我们正在为 CheckedChanged 事件创建事件侦听器,以传递到您的方法中的 any 复选框,我们不需要知道任何相关信息。当此复选框将触发CheckedChanged 事件时,方法CheckChangedEventHandler 将被触发,该方法将始终接受2 个参数object sender, EventArgs esender 是您的复选框,EventArgs e 在对象中包含有关事件发生的其他信息。
      然后,您可以将 sender 转换为 CheckBox 并将其用于您希望的任何目的。

      MyCheckBox.CheckedChanged += new EventHandler<EventArgs >(CheckChangedEventHandler); 
      
       void CheckChangedEventHandler(object sender, EventArgs e)
              {
                  //sender is your checkbox;
                  var checkbox = (CheckBox)sender;
              }
      

      【讨论】:

        【解决方案3】:

        试试这个

        private void ConEnable(CheckBox MyCheckBox, TextBox MyTextBox, bool MyBool) 
        {
           MyCheckBox.Enabled = MyBool;
           MyTextBox.Enabled = MyBool;
           if (!MyBool) {// == false
           MyCheckBox.Checked = MyBool;
           MyTextBox.Text = "";
           MyCheckBox.CheckedChanged += mycheckbox_Changed;
        }
        
          protected void mycheckbox_Changed(object sender, EventArgs e)
          {
           CheckBox checkbox = (CheckBox)sender;
          }
        

        【讨论】:

        • 我试试你的代码。但是,似乎将 mycheckbox_Changed 添加到 CheckedChanged。我可以在 ConEnable 函数中触发 MyCheckBox 吗?
        • 您必须将具有相同委托签名的用户定义方法(mycheckbox_Changed)注册到相应的事件。所以当您触发事件时,它会触发。请确保控件的自动发布属性必须为真。所以从你上面的问题,你可以在ConEnable函数中注册方法后触发checkedchanged事件。
        • 在page_load中添加checkedchanged事件很好。
        • 谢谢,这很有帮助。^^
        猜你喜欢
        • 1970-01-01
        • 2012-06-20
        • 2013-02-21
        • 2011-09-29
        • 1970-01-01
        • 2011-08-25
        • 1970-01-01
        • 1970-01-01
        • 2016-04-13
        相关资源
        最近更新 更多