2014-01-24 98 views
0

好的,這裏是我的問題。我爲每個我創建的複選框賦值,並且只在點擊按鈕後纔將它們放入列表框中。所以這裏是我迄今爲止編寫的代碼,其中當單擊按鈕時,這兩個值都寫入到列表框中,無論它們是否被檢查,我如何使它按照我的解釋工作?檢查複選框的值在按鈕單擊後顯示在列表框中

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); 
     } 
    } 
+0

爲什麼你創建新的複選框對象。從表單中存在複選框獲取值 –

+0

更正您的代碼。發佈時請小心。 –

+0

感謝您的警告,我編輯。 – Ceko

回答

0
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. 
    } 
} 
+0

非常感謝,它工作。乾杯 – Ceko

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); 
    } 
} 

,並附上所有的複選框CheckedChanged事件:

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

或者,如果你想添加所有在你按一下按鈕更改選定值的方法如下:

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)); 
} 
+0

+1使用LINQ :) – rinukkusu

+0

非常感謝,它爲我工作。乾杯。 – Ceko

相關問題