【问题标题】:checked checkbox's value shown in listbox after button click单击按钮后,选中复选框的值显示在列表框中
【发布时间】:2014-01-24 17:46:27
【问题描述】:

好的,这是我的问题。我为我创建的每个复选框分配值,并且仅在单击按钮后检查它们时才尝试将它们放入列表框中。所以这是我到目前为止编写的代码,其中当单击按钮时,两个值都写入列表框,无论它们是否被选中,我怎样才能让它像我解释的那样工作?

public Form1()
    {
        InitializeComponent();
        btnOne.Click += btnOne_Click;
        chckOne.CheckedChanged += chckOne_CheckedChanged;
        chckTwo.CheckStateChanged += chckTwo_CheckStateChanged;
    }
    void btnOne_Click(object sender, EventArgs e)
    { 
        lstOne.Items.Add(number1 + number2);
    }

    string number1 = "ONE", number2 = "TWO";
    void chckOne_CheckedChanged(object sender, EventArgs e)
    {
        CheckBox chk = new CheckBox();
        if (chk.Checked == true)
        {
            lstOne.Items.Add(number1);
        }
     }

    void chckTwo_CheckedChanged(object sender, EventArgs e)
    {
        CheckBox chk = new CheckBox();
        if (chk.Checked == true)
        {
            lstOne.Items.Add(number2);
        }
    }

【问题讨论】:

  • 你为什么要创建新的复选框对象。从表单上存在的复选框获取值
  • 更正您的代码。发帖时要小心。
  • 感谢您的警告,我已编辑。

标签: c# checkbox listbox


【解决方案1】:

只需定义一种方法:

void chkBox_CheckedChanged(object sender, EventArgs e)
{
    var chkBox = sender as CheckBox;
    if (chk.Checked == true)
    {
        lstOne.Items.Add(chkBox.Text);
    }
    else
    {
        lstOne.Items.Remove(chkBox.Text);
    }
}

并附上你所有的 CheckBox CheckedChanged 事件:

 chckOne.CheckedChanged += chkBox_CheckedChanged;
 chckTwo.CheckStateChanged += chkBox_CheckedChanged;

或者,如果您想在 Button 中添加所有选中的值,请按如下方式更改您的方法:

void btnOne_Click(object sender, EventArgs e)
{ 
    this.Controls.OfType<CheckBox>()
                 .Where(c => c.Checked == true)
                 .Select(c => c.Text)
                 .ForEach(text => lstOne.Items.Add(text));
}

【讨论】:

    【解决方案2】:
    List<CheckBox> cbList=new List<CheckBox>();
    
    public Form1()
    {
            InitializeComponent();
            btnOne.Click += btnOne_Click;
            cbList.Add(chckOne);
            cbList.Add(chckTwo);
            //All the checkbox should be added into cbList.
    }
    
    void btnOne_Click(object sender, EventArgs e)
    { 
        lstOne.Items.Clear();  
        var checked_checkbox = cbList.Where(cb=>cb.Checked==true).ToList();
        if(checked_checkbox.Count>0)
        {
            checked_checkbox.ForEach(x=>lstOne.Items.Add(x.Text));// Maybe you want put text of checkbox into listbox.
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-23
      • 1970-01-01
      • 1970-01-01
      • 2012-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多