J'ai un gestionnaire pour Closing
événement d'un onglet, il montre un message de confirmation de fermeture. si l'utilisateur choisir Pas, je mets e.Handled = true;
mais s'il choisit Oui près, je supprimer l'onglet de la liste des onglets et faire d'autres choses, lorsque la méthode arrive à sa fin, il obtient alors appelé à nouveau, montrant la même message, j'ai essayé de mettre e.Handled = true;
à la fin de la méthode mais l'onglet ne se ferme pas.Comment empêcher le double appel de l'événement Closing sans utiliser 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();
}
Cette méthode abonnez-vous à l'événement:
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);
}
Comment avez-vous affecté ce gestionnaire d'événement? Vous avez probablement utilisé '+ =' et je soupçonne que l'endroit où vous avez placé la tâche a été appelé deux fois – Andrei
Il se trouve dans trois signatures de la méthode 'AddToTab', juste l'un d'entre eux est appelé –
pouvez-vous le montrer? – Andrei