나는 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);
}
이 이벤트 처리기를 어떻게 할당 했습니까? 당신은 아마도'+ ='를 사용했고 당신이 할당을 두 번 호출 한 곳을 의심합니다. – Andrei
그것은 AddToTab 메소드의 세 가지 서명에 있습니다. 그 중 하나가 –
으로 표시 될 수 있습니까? – Andrei