2014-01-24 4 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); 
    } 
} 

를 그리고 모든 CheckBox의 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

관련 문제