从 tabPage 中删除控件
Deleting controls from a tabPage
我正在尝试删除运行时在 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;
}
当您删除 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 属性.
来隐藏这些按钮
我正在尝试删除运行时在 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;
}
当您删除 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 属性.
来隐藏这些按钮