2017-10-05 53 views
0

我有一個自定義的UserControl,名爲ClosableTabItem,它繼承自TabItem控件。我只是添加了一個保存按鈕和一個關閉按鈕,我試圖在一些事件處理程序中連線。當用戶點擊X(關閉)時,我想用取消事件參數調用一個「OnClosing」事件,這樣用戶就可以在OnClosing事件中放入一些邏輯,並且如果需要,就可以像關閉一樣取消關閉操作一個windows FormClosing事件。如何創建自定義的UserControl OnClosing事件並僅在用戶未取消的情況下處理表單

我不知道如何在從集合中刪除tabitem之前觸發事件並等待響應。

任何想法?

謝謝。

public class ClosableButtonTabItem : TabItem 
{ 
    private readonly cTabButtonHeader _closableTabHeader; 
    public event EventHandler<TabButtonClickEventArgs> OnTabButtonClick; 
    public event EventHandler<System.ComponentModel.CancelEventArgs> OnTabClosing; 
    public event EventHandler OnTabClosed; 
    public UserControl AttachedForm { get; set; } 

    public string Title 
    { 
     get => ((cTabButtonHeader) this.Header).label_TabTitle.Content.ToString(); 
     set => ((cTabButtonHeader)this.Header).label_TabTitle.Content = value; 
    } 

    public ClosableButtonTabItem() 
    { 
     _closableTabHeader = new cTabButtonHeader(); 
     Header = _closableTabHeader; 

     _closableTabHeader.button_close.Source = 
      ImageHelper.LocalPathToImageSource(ImageHelper.ImageSizes.Size_32x32, "x_off.png"); 

     _closableTabHeader.button_close.MouseEnter += button_close_MouseEnter; 
     _closableTabHeader.button_close.MouseLeave += button_close_MouseLeave; 
     _closableTabHeader.button_close.MouseLeftButtonDown += button_close_MouseLeftButtonDown; 

     _closableTabHeader.label_TabTitle.SizeChanged += label_TabTitle_SizeChanged; 

     //closableTabHeader.button_group.MouseEnter += button_save_MouseEnter; 
     //closableTabHeader.button_group.MouseLeave += button_save_MouseLeave; 
     _closableTabHeader.button_save.MouseLeftButtonDown += button_save_MouseLeftButtonDown; 
    } 

    void button_close_MouseLeftButtonDown(object sender, MouseButtonEventArgs mouseButtonEventArgs) 
    { 
     OnTabClosing?.Invoke(this, new CancelEventArgs()); 

     //Code somewhere that if they don't cancel the OnClosing event the run: 
     ((TabControl)Parent).Items.Remove(this);  } 
} 

回答

-1

我找到了。

void button_close_MouseLeftButtonDown(object sender, MouseButtonEventArgs mouseButtonEventArgs) 
    { 
     if (OnTabClosing == null) 
     { 
      ((TabControl)Parent).Items.Remove(this); 
      OnTabClosed?.Invoke(this, EventArgs.Empty); 
      return; 
     } 

     foreach (var subHandler in OnTabClosing.GetInvocationList()) 
     { 
      var cea = new TabButtonClosingEventArgs(AttachedForm); 
      OnTabClosing?.Invoke(this, cea); 
      if (cea.Cancel) continue; 
      ((TabControl)Parent).Items.Remove(this); 
      OnTabClosed?.Invoke(this, EventArgs.Empty); 
     } 
    } 
相關問題