2011-02-07 3 views
2

레지스트리를 통해 시작할 때 추가되는 응용 프로그램과 관련된 확인란이있는 Windows 양식 응용 프로그램을 작성하고 있습니다. 사용자가 상자를 선택하면 CheckedChanged 이벤트 처리기는 응용 프로그램을 레지스트리에 추가하려고 시도하는 메서드를 트리거합니다. 어떤 이유로 든이 작업이 실패하면 확인란을 선택하지 않은 상태로 되돌리려면 재귀 적으로 다시 트리거합니다. 어떻게 이것을 피할 수 있습니까?어떻게 메소드가 트리거되지 않도록 할 수 있습니까?

마찬가지로 응용 프로그램이 처음로드 될 때 레지스트리를보고 그에 따라 확인란의 초기 상태를 설정합니다. 프로그래밍 방식으로 체크 상자의 상태를 설정할 때 짝수 처리기가 작동하지 않습니다.

짝수 처리기가 CheckedChanged 메서드를 트리거하지 못하도록하는 방법이 있습니까?

답변

2

간단한 플래그로 충분합니다.

bool flag; 

void ClickEventHandler(Object server, EventArgs e) 
{ 
    if (flag) return; 
    .... 
} 

플래그를 적절하게 설정하십시오.

4

하는 간단한 방법은 핸들러를 분리하고 다시 연결하는 것입니다 :

void CheckCbxProgrammatically(bool check) 
{ 
    myCbx.CheckedChanged -= HandleCheckedChanged; 
    myCbx.Checked = check; 
    myCbx.CheckedChanged += HandleCheckedChanged; 
} 

당신은 당신이 그것을 피할 수 있습니다 때 상태를 저글링하고 싶지 않아요.

+1

분명히 작동하지만 이벤트 수신자를 구독 취소하고 구독하는 오버 헤드가 있습니다. –

+2

@Paulo 그 오버 헤드는 간단합니다 –

+1

대체 경로 주셔서 고마워요,하지만 전 전역 변수와 함께 갈 것 같아요. – xbonez

2

이런 종류의 경우 전역 bool isCalledManually을 선언하고 이벤트를 트리거하지 않으려면 true로 설정합니다. 이벤트 :

관련 문제