2017-04-25 6 views
0

나는 Closing 이벤트에 대한 핸들러를 가지고 있으며, 확인 메시지를 보여줍니다. 방법은 그것의 끝에 도달하면, , 그것은 다음, 다시라는 보여주는 얻을 사용자가 없음을 선택하지 않는 경우, 나는 e.Handled = true; 설정 그러나 그가 선택하는 경우 가까이, 나는 탭 목록에서 탭을 제거하고 다른 물건을 할 동일한 메시지, 메서드의 끝에 e.Handled = true;을 설정하려고했으나 탭이 닫히지 않았습니다.e.Handled = true를 사용하지 않고 닫는 이벤트의 두 번 호출을 방지하는 방법은 무엇입니까?

void oTab_TabClosing(object sender, RoutedEventArgs e) 
{ 
    var close = MainClass.ShowMessage(ResCommon.MsgConfirmClose, ResCommon.ttlClose, MainClass.MessageButtons.YesNO); 
    if (!close) 
    { 
     e.Handled = true; 
     return; 
    } 
    FabTab.FabTabItem oTabItem = (FabTab.FabTabItem)sender; 
    if (HtOpenTabs.ContainsKey(oTabItem.Name)) HtOpenTabs.Remove(oTabItem.Name); 
    oTabItem = null; 

    GC.Collect(); 
    GC.WaitForPendingFinalizers(); 
} 

이 방법은 이벤트에 가입 :

public void AddToTab(object formToOpen, string formTitle) 
{ 
    string formName = ((UserControl)formToOpen).Name; 
    if (HtOpenTabs.ContainsKey(formName)) 
    { 
     // By Yousef Mohamed (12-10-2014) - Activate opened tab // 
     foreach (FabTabItem item in ((FabTabControl)this.tabControl).Items) 
     { 
      if (item.Name == formName) 
      { 
       ((FabTabControl)this.tabControl).SelectedItem = item; 
       return; 
      } 
     } 
    } 

    var oTab = new FabTabItem { Content = formToOpen }; 
    oTab.Name = formName; 
    oTab.TabClosing += oTab_TabClosing; 

    oTab.Header = formTitle; 
    BrushConverter bc = new BrushConverter(); 
    Brush brush = (Brush)bc.ConvertFrom("#FFF0F8FF"); 
    brush.Freeze(); 
    oTab.Background = brush; 
    oTab.Height = 30; 
    tabControl.Items.Add(oTab); 
    tabControl.SelectedIndex = tabControl.Items.Count - 1; 
    HtOpenTabs.Add(formName, oTab); 
} 
+1

이 이벤트 처리기를 어떻게 할당 했습니까? 당신은 아마도'+ ='를 사용했고 당신이 할당을 두 번 호출 한 곳을 의심합니다. – Andrei

+0

그것은 AddToTab 메소드의 세 가지 서명에 있습니다. 그 중 하나가 –

+0

으로 표시 될 수 있습니까? – Andrei

답변

0

두 번째 이벤트는 당신의 탭을 제거하기 전에이 이벤트 핸들러를 취소 할 수있는 HtOpenTabs.Remove(oTabItem.Name);

시도에서 발사되는 것으로 보인다.

+0

이것은'Hashtable.Remove' 메소드이다. –