【问题标题】:Deleting controls from a tabPage从 tabPage 中删除控件
【发布时间】:2023-03-15 13:22:01
【问题描述】:

我正在尝试删除在运行时在 tabPage 上创建的按钮。我创建了一个函数,它应该通过该 tabPage 上的所有控件,但由于某种原因,每次调用它时只有一半的按钮被删除。 (页面有8个按钮,我要全部删除)

foreach(var ctr in tabControl.SelectedTab.Controls)
{
    if (ctr is Button)
    {
        if (ctr is Button) { tabControl.SelectedTab.Controls.Remove((Button)ctr); }
    }
}

我什至尝试了以下操作,但遇到了同样的问题,

for (int i = 0; i < 8; i++)
    {
        tabControl.SelectedTab.Controls.Remove(
         ((Button)tabControl.SelectedTab.Controls[i]));
    }

但是,当我尝试调试时,它只识别在 tabPage 上制作的第 1、3、5 和 7 个按钮,并且只删除它们,留下 4。如果我再次尝试这样做,它会删除一半, 留下2。我初始化每个按钮如下。

for (int i = 0; i < 8; i++)
    {
        tempButton[i] = new Button();
        tabControl.SelectedTab.Controls.Add(tempButton[i]);
        tempButton[i].AutoSize = true;
        tempButton[i].Location = new System.Drawing.Point(
                   100 + (150 * (i % 4)), 175 + (175 * (int)(.25 * i)));
        //tempButton[i].Name = "tempButton" + i.ToString();
        tempButton[i].Text = names[i];
        tempButton[i].Size = new System.Drawing.Size(35, 13);
        tempButton[i].TabIndex = i;
    }

【问题讨论】:

    标签: c# tabpage


    【解决方案1】:

    当您删除 Controls[i] 时,下一次 Controls[i] 已更改,因为第二个按钮可能是删除按钮后的第一个按钮。

    您可能会尝试获取所有按钮并将其保存到临时集合中,而不是直接使用 SelectedTab.Controls[i] 引用它们:

    var buttons = tabControl.SelectedTab.Controls.OfType<Button>()
    for (int i = 0; i < buttons.Count; i++) {
       tabControl.SelectedTab.Controls.Remove(buttons[i]);
    }
    

    顺便说一句:您可以考虑通过更改 Visible 属性来隐藏这些按钮。

    【讨论】:

    • 这似乎是问题所在,尽管你的方法给了我同样的问题。结束了一个 for 循环,从最后开始倒数,这似乎很有魅力。感谢您的想法!
    • 我已经测试过代码,不能重复你说的!你确定上面的代码不起作用吗?请拍快照!
    • 测试了我的原始代码,还是反向 for 循环?另外,我是stackoverflow的新手,你想要什么快照?
    • 只是好奇我的代码可以正常工作,为什么不适合你?如果它打扰并很高兴它有帮助,请忘记它!
    猜你喜欢
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    相关资源
    最近更新 更多