2016-07-01 1 views
0

저는 양식에 라디오 버튼을 동적으로 생성하고 있습니다. 사용자가 선택을 취소 할 수 있기를 바랍니다. 사용자의 옵션은 하나를 선택하거나 none을 선택해야합니다 (확인란보다 라디오 버튼을 사용하는 것이 안전합니다). EventHandler를 사용하여 이벤트를 만들려고했지만 제대로 작동하지 않는 데별로 운이 없었습니다. 여기 C# 어떻게 동적으로 생성 된 라디오 버튼을 선택 취소 할 수 있습니까?

내가 버튼을 만들고있어 한 내용은 다음과 같습니다

private void makeRadioButtons(string size, Panel pnl) 
    { 
     for (int i = 0; i < 2; i++) 
     { 
      RadioButton btn = new RadioButton(); 
      btn.AutoSize = true; 
      btn.Name = i; 
      btn.Text = i; 
      btn.Location = new Point(100*i, 0); 
      btn.Click += new EventHandler(radioHandler); 
      pnl.Controls.Add(btn); 
     } 
} 

그리고 여기 내 이벤트 핸들러 :

private void radioHandler(object sender, EventArgs e) 
    { 
     RadioButton rdo = sender as RadioButton; 
     if(rdo.Checked) 
     { 
      rdo.Checked = false; 
     } 
     else 
     { 
      rdo.Checked = true; 
     } 
    } 

내가 버튼을 얻을 컴파일하지만 선택하거나 선택 취소 할 수 있습니다 그들. 나는 가깝다고 느낀다. 그러나 나는 단지 내가 여기서 잘못하고있는 것을 알아낼 수 없다.

+0

winforms 또는 asp.net? –

+0

클릭했을 때 자동으로 확인되지 않습니까 ('pnl.Controls'의 다른 항목은 선택하지 않았습니까?)? _ 정확하게 무엇을하고 싶니? 그리고 단순히'rdo.Checked =! rdo.Checked; '를 설정하는 것으로''if' '로 변환 할 수 있습니다. –

+0

라디오 버튼은 그룹에서 단 하나의 선택을 시행하도록 설계되었습니다. 이것이 정확하게 당신이 요구하는 체크 박스의 기능 일 때 어떻게 사용하는 것이 더 안전합니까? –

답변

0

혼란스러운 이벤트 처리 코드입니다.

사용자가 클릭 할 때 라디오 버튼이 자동으로 선택/선택 해제됩니다.

코드가 반대입니다!

그냥 핸들러의 제거 편집은

필요합니다.

+0

올바르게 처리해야하는 방법에 대한 코드를 제공해야합니다. –

1

라디오 버튼은 기본적으로 자동으로 선택됩니다. 만들 때 해당 AutoCheck 속성을 false으로 설정하면이를 피할 수 있습니다.

그런 다음 당신은 다음과 같이 핸들러를 변경해야합니다 : 클릭 한 버튼이 체크 된 경우

private void radioHandler(object sender, System.EventArgs e) 
{ 
    RadioButton rbt = (RadioButton)sender; 
    if (rbt.Checked) 
    { 
     rbt.Checked = false; 
     return; 
    } 

    rbt.Checked = true; 
    foreach (RadioButton r in pnl.Controls.OfType<RadioButton>()) 
     if (r != rbt) r.Checked = false; 
} 

그래서,이 체크되지 않은 것입니다. 확인하지 않은 경우 체크하고 다른 모든 체크를 해제합니다 ( AutoCheck부터 false까지 설정했기 때문에 필요합니다).

+0

아무 것도 검사 할 수 없다는 문제가 여전히 발생하고 있습니다. – Chuck

+0

@Chuck 디버깅을 했습니까? 나는 그것을 테스트하고 나를 위해 작동 ... –

+0

나는 그것을 내 프로그램에 넣고 그것을 (비주얼 스튜디오를 사용하여) 컴파일. VS에서 프로그램을 실행해도 해당 그룹의 라디오 버튼을 선택할 수 없습니다. 아마도 내 문제는 처리기 외부의 어딘가에 있을까요? – Chuck

관련 문제