2014-01-27 128 views
-1

当我选中复选框列表中的复选框时,checkbox.text将添加到列表框中。 但是,当我取消选中该复选框时,checkbox.text将从列表框中移除。 但问题是我不知道如何从列表框中删除选定的项目。c#取消选中取消选中复选框

[Press here to see the picture][2]<br>

例如,当我检查checkbox1,checkbox2,checkbox3,列表框将显示
checkbox1 checkbox2 checkbox3

然而,当我取消选中该复选框,仍然相同 我插在这儿。帮帮我 !!

这里是我的代码:

private void checkBox1_CheckedChanged(object sender, EventArgs e) 
{ 
    if (checkBox1.Checked) listBox1.Items.Add(checkBox1.Text); 

} 

private void checkBox2_CheckedChanged(object sender, EventArgs e) 
{ 
    if (checkBox2.Checked) listBox1.Items.Add(checkBox2.Text); 
} 

private void checkBox3_CheckedChanged(object sender, EventArgs e) 
{ 
    if (checkBox3.Checked) listBox1.Items.Add(checkBox3.Text); 
} 

private void checkBox4_CheckedChanged(object sender, EventArgs e) 
{ 
    if (checkBox4.Checked) listBox1.Items.Add(checkBox4.Text); 
} 

回答

0

你可以做一个功能可按

private void checkBoxCheckedChanged(object sender, EventArgs e) 
     { 
      CheckBox cb = sender as CheckBox; 
      if (cb != null) 
       if (cb.Checked) listBox1.Items.Add(cb.Text); else listBox1.Items.Remove(cb.Text); 
     } 

然后将其添加为所有您的复选框为CheckedChanged事件。

+0

谢谢,你救了我的一天。 但我有问题。如果我有很多复选框,那么有没有这样做的快捷方式,而不是添加checkBoxCheckedChanged(sender,e);在每一个checkbox_CheckedChanged事件? – sky91

+0

选择所有这些并添加该事件 –

5
if (checkBox3.Checked) 
    listBox1.Items.Add(checkBox3.Text); 
else 
    listBox1.Items.Remove(checkBox3.Text); 

注意,这将永远删除无论是在Text财产。这意味着,如果我选中该框,更改textBoxX中的文本,然后取消选中,它将删除不同的项目。

1

ListBox上的Items集合具有Remove方法。在你的每个CheckedChanged事件中加入一个else,并使用Remove方法。

if (checkBox4.Checked) listBox1.Items.Add(checkBox4.Text); 
else listBox1.Items.Remove(checkBox4.Text); 
0

致电Remove()方法。它接受一个指定要删除的项目的参数。

private void checkBox1_CheckedChanged(object sender, EventArgs e) 
{ 

    if (checkBox1.Checked) 
     listBox1.Items.Add(checkBox1.Text); 

    else 
     listBox1.Items.Remove(checkBox1.Text); 

} 

private void checkBox2_CheckedChanged(object sender, EventArgs e) 
{ 

    if (checkBox2.Checked) 
     listBox1.Items.Add(checkBox2.Text); 

    else 
     listBox1.Items.Remove(checkBox2.Text); 

} 

private void checkBox3_CheckedChanged(object sender, EventArgs e) 
{ 
    if (checkBox3.Checked) 
     listBox1.Items.Add(checkBox3.Text); 

    else 
     listBox1.Items.Remove(checkBox3.Text); 

} 

private void checkBox4_CheckedChanged(object sender, EventArgs e) 
{ 
    if (checkBox4.Checked) 
     listBox1.Items.Add(checkBox4.Text); 

    else 
     listBox1.Items.Remove(checkBox4.Text); 

} 
1

建立一个通用函数并调用。对于例如

private void addRemove(CheckBox chk) 
{ 
if (chk.Checked) 
    listBox1.Items.Add(chk.Text); 
else 
    listBox1.Items.Remove(chk.Text); 
} 

呼叫

addRemove(checkbox1); 
0

如果那是你想做的事,为什么不分配相同的事件,每一个复选框,然后执行以下: -

CheckBox chkBox=(CheckBox)sender; 
if (chkBox.Checked) 
    listBox1.Items.Add(chkBox.Text); 
else 
    listBox1.Items.Remove(chkBox.Text); 
+0

如何将所有checkbox_CheckedChanged事件分配到单个事件中,以便我可以轻松处理? – sky91

+0

看看http://www.dotnetperls.com/button你有这个事件是从属性窗口分配 –

+0

我仍然不能明白你的意思。你能举个例子吗? – sky91