C# WPF에서 내 TabControl의 SelectionChanged 이벤트가 너무 자주 실행되는 이유는 무엇입니까?
각 탭에 프레임이 포함된 탭이 있는 GUI가 있습니다.이 프레임 중 하나에 데이터 그리드가 있습니다.사용자가 이 탭을 선택하면 데이터 그리드가 정렬되어야 하므로 TabControl SelectionChanged 이벤트를 사용하여 정렬을 트리거합니다.그러나 이 이벤트는 탭 자체가 변경되지 않은 상태로 유지되더라도 데이터 그리드에서 항목을 선택할 때마다 트리거됩니다.
다양한 이벤트를 시도해 보았습니다.TabItem RequestBring에 대해 GotFocus를 받았습니다.탭 항목에 대한 뷰로
하지만 그들은 모두 이 문제로 고통받는 것처럼 보입니다.무엇이 원인입니까?
그TabControl.SelectionChanged
이벤트와 동일한 이벤트입니다.ComboBox.SelectionChanged
에서 비롯됩니다.
따라서 이벤트 핸들러에서 이벤트를 처리된 것으로 표시하지 않으면 트리에 거품이 발생하고 결국 이벤트에 도달합니다.TabControl
이는 "너무 자주 발생하는" 문제를 야기하고 있습니다.
이벤트를 SelectionChanged에서 처리된 것으로 표시합니다.ComboBox
/ListBox
/ListView
/다음과 같이 데이터 그리드에서 사용하는 다른 선택기:
private void MyComboBox_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
e.Handled = true;
}
그리고 이 불편함은 사라질 것입니다 ;).
개인 void 탭ControlName_SelectionChanged(개체 보낸 사람, SelectionChangedEventArgue){만일(e)Source is TabControl) //이 이벤트가 TabControl에서 발생한 경우 다음을 입력합니다.{if(ItemName 탭).선택됨){//여기서 업무 수행}}}
상위 요소에 AddHandler가 있는 핸들러를 추가한 경우 모든 선택 변경사항은 SelectionChanged-event를 실행합니다.이 경우 TabControl에 이름을 지정한 다음 원본 소스의 이름이 TabControl의 이름인지 여부를 EventHandler에서 확인할 수 있습니다.
또 다른 좋은 방법은 탭 컨트롤에 핸들러를 추가하는 것입니다.Items.선택이 변경됨:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
ItemCollection view = tabControl.Items;
view.CurrentChanged += new EventHandler(view_CurrentChanged);
}
void view_CurrentChanged(object sender, EventArgs e)
{
throw new NotImplementedException();
}
검사 방법이 아닐 수도 있지만, 항목이 변경될 때만 작동하기 때문에 통증이 적습니다.
언급URL : https://stackoverflow.com/questions/3659858/in-c-sharp-wpf-why-is-my-tabcontrols-selectionchanged-event-firing-too-often
'programing' 카테고리의 다른 글
디렉토리 열기 대화상자 (0) | 2023.04.26 |
---|---|
5.0.0으로 업그레이드한 후 토큰 유효성 검사 매개 변수가 더 이상 작동하지 않음 (0) | 2023.04.26 |
NSNumber를 NSString으로 변환하는 방법 (0) | 2023.04.26 |
UPDLOCK, HOLDLOCK에 대해 혼동됨 (0) | 2023.04.26 |
NSDate에 1일을 추가하려면 어떻게 해야 합니까? (0) | 2023.04.26 |