2012-10-16 3 views
2

Windows Forms에서 마법사 프레임 워크를 작성하려고합니다. 나는이 사이트와 다른 사이트에서 유용한 팁을 많이 수집하여 성공에 매우 가깝게 만들었습니다. 그러나 마법사의 첫 번째 페이지 이외의 다른 탭 페이지에서 ErrorProvider를 표시하는 데 문제가 있습니다.Windows Forms 오류 공급자가 사용자 지정 탭 컨트롤에 표시되지 않는다

내 마법사 컨트롤은 UserControl입니다. 여기에는 TabControl에서 파생 된 사용자 지정 탭 컨트롤이 포함되어 있으므로 컨트롤의 맨 아래에있는 뒤로/다음/마침/취소 단추의 일반적인 컬렉션과 함께 탭을 숨기고 키 누르기를 사용하여 탭 사이를 탐색하려는 시도를 무시할 수 있습니다.

다음 단추를 눌렀을 때 마법사 컨트롤에 속한 특정 TabPage에서 유효성 검사 이벤트를 발생시킬 수 있도록 리플렉션을 사용했습니다. (난 전체 TabControl, 현재 활성화 된 페이지의 유효성을 확인하고 싶지 않아요.) 내가 이렇게하면 디버거에서 현재 탭 페이지에서 컨트롤에 대한 내 유효성 검사 루틴이 올바르게 호출되고 볼 유효한 오류 메시지와 함께 특정 컨트롤 (이 경우 TextBox)에 첨부 된 ErrorProvider를 호출했습니다. 유효화 루틴의 CancelEventArgs에 대해 Cancel을 true로 설정하면 반사 메커니즘을 사용하는 코드에 의해 선택되어 실패하고 탭을 변경하지 않는다는 것을 알 수 있습니다. 그리고 검증에 실패한 컨트롤에 포커스를 성공적으로 설정했습니다.

이렇게 모두 잘 작동하는 것처럼 보입니다.

불행히도, 내가 하지 마십시오 첫 번째 탭 페이지에 있지 않으면 ErrorProvider의 명랑한 깜박임 아이콘을 참조하십시오. 다른 모든 탭 페이지에는 메시지가 전혀 표시되지 않습니다.

나는 당황하고 있습니다. 이견있는 사람? 도움이된다면 코드 스 니펫을 제공 할 수 있습니다.

감사합니다.

답변

0

나는 마법사의 다음 단계로 이동 버튼을 케이스에 배치되어 있다고 가정 (아래) 외부 내가 해제하지 않고 버튼을 누를 경우 아이콘이 제대로 표시되어 있는지 눈치 TabControl

마우스 버튼. 유효성 검사 오류가 발생했지만 (일반적으로 활성 컨트롤을 벗어날 수는 없음) 컨테이너 외부의 단추가 포커스가있는 이벤트를 얻는 것 같습니다.

private void cmdOK_MouseUp(object sender, MouseEventArgs e) 
{ 
    tabControl1.Focus(); 
} 

참고 : 당신은 또한 양식의 하나 ActiveControl 속성을 설정해야합니다

은 내가 TabControl "를 재조명"을 MouseUp 이벤트 버튼에 대한 이벤트 핸들러를 등록하여이 문제를 해결했다 유효성 검사에 실패한 컨트롤