【问题标题】:return a value from checkbox_CheckChanged从 checkbox_CheckChanged 返回一个值
【发布时间】:2011-10-25 07:40:31
【问题描述】:

请问如何获取从 checkbox_CheckChanged 事件返回的值?它是一个 winforms 应用程序,表单和复选框都是以编程方式创建的。感谢所有帮助。

【问题讨论】:

  • 你的代码在哪里。你能提供那个吗?

标签: c# winforms events


【解决方案1】:

Controls 事件处理程序始终为“无效”,您无法更改return type。相反,您可以采用外部变量,并且仅在发生 CheckedChanged 事件时更改该值。

public bool checkedthecheckbox { get; set; }

CheckBox testchbox = new CheckBox();

private void Form1_Load(object sender, EventArgs e)
{
    testchbox.CheckedChanged += new EventHandler(testchbox_CheckedChanged);
}

void testchbox_CheckedChanged(object sender, EventArgs e)
{
    if (testchbox.Checked)
        checkedthecheckbox = true;
    else
        checkedthecheckbox = false;
}

【讨论】:

  • 感谢所有回答的人,特别感谢 skk 的具体回答。
【解决方案2】:

你可以从 'sender' 对象中获取值。

CheckBox chk = (CheckBox) sender;
bool result = chk.Checked;

【讨论】:

    【解决方案3】:

    您可以通过从事件参数转换发送者对象来获取复选框的状态:

    public void Method1()
    {
        CheckBox checkBox = new CheckBox();
        checkBox.CheckedChanged += new EventHandler(checkBox_CheckedChanged);
    }
    
    void checkBox_CheckedChanged(object sender, EventArgs e)
    {
        CheckBox c = (CheckBox)sender;
        bool resutlt = c.Checked;
    }
    

    希望这会有所帮助!

    【讨论】:

      【解决方案4】:

      您可以使用 CheckState.CheckedCheckState.Unchecked,它们是用 C# 构建的。示例:

      for (int i = 0; i < lsbx_layers.Items.Count; i++) {
          if (lsbx_layers.GetItemCheckState(i) == CheckState.Checked) {
              //set  boolean variable to true
          } else if (lsbx_layers.GetItemCheckState(i) == CheckState.Unchecked) {
               //set  boolean variable to false
          }
      }
      

      【讨论】:

        【解决方案5】:

        我有一个替代方法,可以将常规复选框更改事件更改为直接为您提供更改后的Checked 值的事件。

        例如,您可以这样使用它:

        var myForm = new MyForm();
        myForm.CheckBoxChanged += v =>
        {
            Console.WriteLine("The value of the checkbox changed to {0}", v);
        };
        

        这是类定义:

        public class MyForm
        {
            public event Action<bool> CheckBoxChanged;
            private CheckBox testchbox = new CheckBox();
            private void Form1_Load(object sender, EventArgs e)
            {
                testchbox.CheckedChanged += (s, e) =>
                {
                    var cbc = this.CheckBoxChanged;
                    if (cbc != null)
                    {
                        cbc(testchbox.Checked);
                    }
                };
            }
        }
        

        我希望这会有所帮助。

        【讨论】:

          猜你喜欢
          • 2018-07-31
          • 2014-10-21
          • 2012-11-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-18
          • 2019-08-14
          相关资源
          最近更新 更多