2012-01-10 3 views
1

라디오 버튼이있는 그룹 상자가 있습니다. 코드 프로젝트에서 튜토리얼을 사용하여 직렬화를 구현하려고합니다. 이 튜토리얼은 라디오 버튼이 아닌 체크 박스의 직렬화를 지원합니다. 그래서 나는 체크 박스로 애플 리케이션에서 라디오 버튼을 만들 필요가있다 (즉 그들은 체크 박스가되어야하지만 라디오 버튼처럼 작동해야한다).C# .net 라디오 버튼처럼 동작하는 확인란 만들기

코드 작성을 시도했지만 어떤 특정 확인란이 선택되어 있고 선택 취소 또는 그 반대로 이동하면 checked_changed 이벤트 처리기가 트리거되고 무한 루프가됩니다.

누군가 나를 도와 줄 수 있습니까?

감사

UPDATE :

당신의 응답을 본 후, 나는 감사에게 많은 말을하고 싶습니다. 예, 괜찮습니다. 기본 속성을 망쳐서는 안됩니다. 나는 연재 방법을 바꾸는 작업을 할 것이다.

답장이 나는 기본 속성을 변경할 수 있지만, 시리얼 코드를 변경하지 않기로 결정, 여기에 게시 다음과 후 :

P.S 튜토리얼에 대한 링크는 http://www.codeproject.com/KB/dialog/SavingTheStateOfAForm.aspx

최종 업데이트입니다. 나는 그것을했고 이제는 완벽하게 작동합니다. 고마워. 모두들.

+9

Ack ...하지 마세요. 컨트롤은 이유에 따라 표준화됩니다. 사용자가 라디오 부턴을 본다면 1 개만 선택할 수 있습니다. 확인란을 선택하면 여러 항목을 선택할 수 있습니다. – Jamiec

+2

1) 일부 코드를 게시하십시오. 2) 자습서에 대한 링크는 어떻습니까? 3) RadioBox와 마찬가지로 CheckBox를 수행하는 것은 나쁜 생각처럼 들립니다. 더 좋은 생각은 RadioButton을 지원하는 직렬화를 변경하는 것입니다. – cadrell0

+2

단순히 확인란의 직렬화와 동일한 방식으로 라디오 버튼의 직렬화를 구현하지 않는 이유는 무엇입니까? 큰 차이를 만들어서는 안됩니다. – Vlad

답변

5

모든 코멘트 작성자의 의견에 동의합니다. 라디오 버튼처럼 작동하는 체크 박스를 만들지 마십시오. UI 규칙에 따라 사용자를 혼란에 빠뜨립니다.

올바른 방법은 코드를 수정하여 라디오 버튼을 직렬화하는 것입니다.하지만 코드를 보지 않아도 어떻게 도와야하는지 알기가 어렵습니다. 시작하기 전에 어떤 일을하기 전에 이벤트 핸들러를 일시적으로 제거하여 CheckedChanged 루핑을 수정할 수 있습니다. 예 :

myCheckBox.CheckedChanged -= MyCheckedChangedEventHandler; 
myCheckBox.Checked = true; 
myCheckBox.CheckedChanged += MyCheckedChangedEventHandler; 

이 경우만으로도 문제가 해결되지 않으면 코드를 제시하면 더 도움을 드리겠습니다.

편집 : 당신이 FormSerialisor.Deserialise()를 호출 할 때이 업데이트에 나와있는 튜토리얼을 바탕으로, 나는이 문제를 추측하고있어 발생, 화재하여 컨트롤 '이벤트 핸들러를 트리거? 그렇다면 빠른 언급은 내가 언급 한 것을 수행하는 것입니다 : FormSerialisor.Deserialise()을 호출하기 전에 라디오 버튼 이벤트 핸들러를 제거한 후 나중에 다시 추가하십시오. 예 :

myRadioButton.CheckedChanged -= MyCheckedChangedEventHandler; 
FormSerialisor.Deserialise(this, mySerialisepath); 
myRadioButton.CheckedChanged += MyCheckedChangedEventHandler; 

RadioButton을 처리하려면 FormSerialisor 클래스를 편집해야 할 수도 있습니다. 확인란을 처리하지만 RadioButton에 대한 모든 참조를 변경하는 코드 만 복사하면됩니다. 이 단계가 필요한지 여부는 귀하의 질문에서 분명하지 않습니다.

+0

나는 당신이 무엇을 말하려고하는지 이해했습니다. 튜토리얼에서는 라디오 버튼을 처리하지 않습니다. 나는 그들을 또한 그들을 처리하기 위해 바꿀 것이다. 도와 주셔서 정말로 고맙습니다. – Bharath

+0

게시물에 대해 감사드립니다. 나는 register/unregister checked 이벤트를 사용하지 않았다. 라디오 버튼을 처리하기 위해 serializer 클래스를 편집했습니다. 다시 한번 감사합니다. – Bharath

0

의견과 마찬가지로 라디오 버튼을 사용하여 일련 번호를 지정하는 것이 체크 박스를 사용하는 것보다 낫습니다. 이미 필요한 변경 효과를 얻으려면 이미 변경 이벤트를 처리하고 있음을 나타내는 변수를 설정하고 테스트하십시오. 이런 식으로 뭔가 (끔찍 코드,하지만 아이디어를 보여줍니다) 다음 Checked 이벤트에서 (-=를 사용하여)

private bool autoChange = false; 
    private void ChangeHandler() { 
     if (!autoChange) { 
      autoChange = true; 
      /* Do stuff */ 
      autoChange = false; 
     } 
    } 
0

등록 취소 그 일을하기 전에.완료되면 다시 등록하십시오.

는 (. 난 그냥 질문에 대답 의견과 주장 아니에요.)

1

안녕하세요, 여기에 간단한 ansewer을 RadioButton에있는 확인란을 변환 :

object clickBox = null; 

private void checkBox_Click(object sender, EventArgs e) 
    { 
     clickBox = sender; 

     foreach (Control c in this.Controls) 
     { 
      if (c is CheckBox) 
      { 
       if (c != clickBox) 
       { 
        ((CheckBox)c).Checked = false; 
       } 
      } 
     } 

그리고 추가 이 클릭 이벤트 모든 체크 박스 마침

관련 문제