繁体   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