簡體   English   中英

C#WinForms TabControl刪除選項卡並關閉子控件

[英]C# WinForms TabControl Remove Tab and close child controls

我有一個父容器(窗體),該容器初始化了一個內部帶有用戶控件的新TabPage(從菜單欄調用)。 選項卡控件具有一個上下文菜單,當您右鍵單擊並選擇“關閉選定的選項卡”時,我將調用一種刪除該選項卡的方法。 但是,它不會阻止該TabPage用戶控件內的代碼運行。 我該如何清理,以便當我關閉Tab(TabPages.Remove ...等)時也關閉該TabPage中的用戶控件,從而使任何后台代碼停止執行?

下面的代碼關閉了選項卡:刪除選項卡后,后半部分僅選擇左側的下一個選項卡。

       public static void closeCurrentTab(TabControl tc)
    {
        int curTabIndex = tc.SelectedIndex;
        TabPage tp = tc.SelectedTab;
        tc.TabPages.Remove(tp);
        if(curTabIndex > 0)
        {
            tc.SelectedTab = tc.TabPages[(curTabIndex - 1)];
        }       
    }

我發現了問題。 我發現子處理控件中的異步進程甚至在處理父處理控件(在本例中為TabPage)之后也誤入歧途。

下面是我如何解決的一個簡單示例。

另外,對於更復雜的任務鏈,一旦父級變為null,我可以引入取消Tolkens,這樣一旦用戶關閉托管該控件的選項卡但不關閉整個應用程序,就清除所有需要的內容。

使用this.Parent並測試它是否為null,無論id是否像這樣。

        protected override void OnParentChanged(EventArgs e)
    {
        base.OnParentChanged(e);
        if(this.Parent == null)
        {
        // Clean up

        }
    }

和\\或這個

 private async Task popUp()
    {
        do
        {
            MessageBox.Show("Im running!");
            await Task.Delay(5000);
        }
        while (this.Parent != null);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM