gpt4 book ai didi

c# - 如何在事件 ControlRemoved 事件后获取刷新的 TabPages 列表?

转载 作者:行者123 更新时间:2023-11-30 22:56:21 26 4
gpt4 key购买 nike

我有一个 TabControl用户可以添加/删除 TabPage使用两个用户按钮。为清楚起见,GUI 如下所示:

enter image description here

如果用户点击“加号”图标(Parent 是主窗体,也是 Parent 本身的 TabControl),一个新的 TabPage添加包含自定义用户控件:

TabPage indicator = new TabPage();
indicator.Controls.Add(new IndicatorTab(this.conditionsTab, this.limitsTab) { Dock = DockStyle.Fill});
indicatorsTab.TabPages.Add(indicator);

如果用户单击用户控件内的“删除”按钮,将发生以下情况:

Parent.Dispose();

我添加了一个 ControlEventHandler对此 TabControl事件 ControlAddedControlRemoved ,我在其中运行这个循环:

foreach (TabPage indicator in indicatorsTab.TabPages)
{
//stuff
}

我的问题如下:

  • ControlAdded事件被触发,我在 indicatorsTab.TabPages 中找到所有TabPage 包括刚刚添加的那个 - 对我来说是期望的
  • ControlRemoved事件被触发,我在 indicatorsTab.TabPages 中找到所有TabPage 包括刚刚删除的那个 - 对我来说出乎意料

我不希望删除的选项卡位于 indicatorsTab.TabPages 中在ControlRemoved之后被触发。所以我有几个问题:

  1. 我的逻辑错了吗?是否预计删除TabPage事件触发后仍在集合中?
  2. 如何获取 TabPage 的刷新列表?在移除事件之后?
  3. 不知道为什么,但我觉得这种不同的行为与 ControlAdded 的事实有关。事件由“兄弟”控件(与 Parent 相同的 TabControl 的子控件)触发,而 ControlRemovedTabControl 的 child 触发本身......如果是这样,任何人都可以解释一下吗?

最佳答案

您可以延迟事件处理程序的执行,直到处理完删除:

private void tabControl1_ControlRemoved(object sender, ControlEventArgs e)
{
BeginInvoke(new Action(() =>
{
MessageBox.Show(tabControl1.TabCount.ToString());
}));
}

它显示了预期的结果。

注意:TabControl 有自己的ControlsCollection 类并在其Remove 中方法,它首先从 Controls 集合中删除 TabPage 控件并引发 ControlRemoved,然后从 中删除 TabPage >TabPages 集合。因此,在 ControlRemoved 事件中,TabPage 仍然存在于 TabPages 集合中,但不存在于 Controls 中收藏。

关于c# - 如何在事件 ControlRemoved 事件后获取刷新的 TabPages 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54525458/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com