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