[英]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.