2010-05-10 2 views
1

사용자가 체크 상태를 변경할 때뿐만 아니라 폼로드시 발생하는 CheckBox의 OnCheckedChanged 이벤트에 대한 논리가 있습니다. 나는 논리가 사용자 동작시에만 실행되기를 원합니다.WinForms CheckBox에서 사용자와 프로그래밍 방식의 차이점을 구분하는 방법은 무엇입니까?

사용자 변수 설정/검사에 의존하지 않는 사용자 대 프로그램 방식 변경을 감지하는 매끄러운 방법이 있습니까?

답변

0

나는 일반적으로 내 양식에 값을 프로그래밍 방식으로 변경하기 전에 true로 설정 한 bool 플래그가 있습니다. 그런 다음 이벤트 처리기는 해당 플래그가 사용자인지 프로그래밍 방식인지 확인할 수 있습니다.

+2

cs31415는 '사용자 변수'설정이 필요하지 않은 솔루션을 요청했습니다. – Aren

0

좋은 반사음을 사용해보세요.

StackFrame lastCall = new StackFrame(3); 
if (lastCall.GetMethod().Name != "OnClick") 
{ 
    // Programmatic Code 
} 
else 
{ 
    // User Code 
} 

이 호출 스택은 다음과 같이 간다 :

  • 의 OnClick을

그래서 당신이 검사, SET 사람 구별 다시 3을 갈 필요가 OnCheckChanged set_Checked

할 기억하기 어쨌든, 호출 스택을 망칠 수있는 것들이 있습니다. 100 % 신뢰할 수있는 것은 아니지만 원본 소스를 검색하기 위해 이것을 약간 확장 할 수 있습니다.

0

나는 이것을 시험해 보았다.

 bool user_action = false; 
     StackTrace stackTrace = new StackTrace(); 
     StackFrame[] stackFrames = stackTrace.GetFrames(); 
     foreach (StackFrame stackFrame in stackFrames) 
     { 
      if(stackFrame.GetMethod().Name == "WmMouseDown") 
      { 
       user_action = true; 
       break; 
      } 
     } 

     if (user_action) 
     { 
      MessageBox.Show("User"); 
     } 
     else 
     { 
      MessageBox.Show("Code"); 
     } 
관련 문제