【问题标题】:C# Listen for checkbox chenge in groupboxC# 侦听 groupbox 中的复选框更改
【发布时间】:2022-01-16 12:54:42
【问题描述】:

我有一个包含 16 个复选框的组框,我需要运行一个事件来知道按下的按钮是否改变状态。

我知道我可以为每个操作添加一个点击操作,但有没有更简洁的方法呢?

【问题讨论】:

  • 我很想知道您最初是如何构建这些盒子的。如果您是动态创建它们,那么您可以同时附加处理程序。
  • @Enigmativity “我是如何构建它的”是什么意思?它们只是在编译时放置的样式复选框。
  • 您只是使用设计器拖放组件,而不是动态创建框。

标签: c# winforms checkbox event-handling


【解决方案1】:

我意识到您可以重用动作并强制转换发送者对象:

private void InputSwitched(object sender, EventArgs e)
        {
            CheckBox chk = (CheckBox)sender;
        }

【讨论】:

    【解决方案2】:

    您可以使用单个事件处理程序来处理组框的所有复选框的选中事件,如下所示:

    public Form1()
    {
        InitializeComponent();
        groupBox1.Controls.OfType<CheckBox>()
            .ToList().ForEach(c => c.CheckedChanged += C_CheckedChanged);
    }
    private void C_CheckedChanged(object sender, EventArgs e)
    {
        var c = (CheckBox)sender;
        MessageBox.Show($"{c.Name} - Checked: {c.Checked}");
    }
    

    【讨论】:

      【解决方案3】:

      这就是我在 cmets 中关于动态创建控件的意思。

      你可以这样做:

          private List<CheckBox> _checkBoxes = null;
      
          public Form1()
          {
              InitializeComponent();
      
              var checkbox_count = 15;
      
              _checkBoxes =
                      Enumerable
                          .Range(0, checkbox_count)
                          .Select(x => new CheckBox()
                          {
                              Text = $"CheckBox {x}",
                          })
                          .ToList();
      
              foreach (var checkbox in _checkBoxes)
              {
                  flowLayoutPanel1.Controls.Add(checkbox);
                  checkbox.CheckedChanged += (s, e)
                          => checkbox.BackColor =
                              checkbox.Checked
                                  ? Color.Red
                                  : Color.Blue;
              }
          }
      

      【讨论】:

        猜你喜欢
        • 2016-06-01
        • 2012-10-30
        • 2011-06-30
        • 2015-10-20
        • 2023-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多