C#WinForms TabControl删除选项卡并关闭子控件



我有一个父容器(表单(,它初始化一个新的TabPage,其中包含一个用户控件(从菜单条调用(。Tab控件有一个上下文菜单,当你右键单击并选择"关闭选定的选项卡"时,我会调用一个删除该选项卡的方法。但是,它不会阻止TabPage的用户控件中的代码运行。我如何清理它,以便在关闭选项卡(TabPages.Remove…等(时,它也会关闭该选项卡中的用户控件,从而停止执行任何后台代码?

下面的代码是关闭选项卡的内容:后一部分只是在移除选项卡后选择左侧的下一个选项卡。

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,从而在用户关闭托管该控件的选项卡但不关闭整个应用程序时清理所需的内容。

使用此。父级并测试它是否为空,除非用户愿意。

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);
}

最新更新