找到动态创建的控件并隐藏它

时间:2012-06-20 18:28:21

标签: c# winforms

同样,我正在根据此post动态创建按钮,现在我需要相应地隐藏它。如何查找和隐藏按钮。这对我来说是新的,因为我习惯了拖放操作。任何帮助,将不胜感激。谢谢你提前。

6 个答案:

答案 0 :(得分:2)

使用上一个问题中的示例,我添加了一个“名称”属性:

int lastX = 0;
for (int i = 0; i < 4; i++) {
  Button b = new Button();
  b.Name = "button" + i.ToString();
  b.Location = new Point(lastX, 0);
  this.Controls.Add(b);
  lastX += b.Width;
}

现在您可以按名称访问它:

if (this.Controls.ContainsKey("button1"))
  this.Controls["button1"].Visible = false;

答案 1 :(得分:1)

var button = (from b in this.Controls.OfType<Button>()
              where b.Name == nameOfButton).First();

button.Hide();

答案 2 :(得分:0)

您必须知道控件的名称。然后使用它:

foreach(Control control in Controls){
  if (control.Name == "your control name"){
      control.Visible = false;
  }
}

例如,如果您的控件位于名为mypanel的面板中,则必须编写foreach(Control control in mypanel.Controls) 希望它有所帮助

答案 3 :(得分:0)

如果您将动态创建的控件保留在Dictionary<string, ControlType>中,则可以非常轻松有效地找到它们。当然,关键是你的控制名称。

答案 4 :(得分:0)

如果您的表单包含面板等容器,则应进行递归搜索:

void SetVisible(Control c)
{
    if (control.Name == "your control name") 
          control.Visible = false; 

    foreach(Control control in c.Controls){       
      SetVisible(control);       
    }

} 

然后在某处打电话:

SetVisible(this);

答案 5 :(得分:0)

非常老的问题,但接受的答案对我不起作用,因为我的控件是嵌套的(另一个控件的子控件)。

Controls.Find 方法为我工作,为第二个参数传递“true”,告诉它搜索子项:

        Control c = panelControls.Controls.Find("MyControlName", true).FirstOrDefault();
        if (c != null && c is ComboBox) {
            ComboBox cmb = (ComboBox)c;
            cmb.Hide();
        }

文档: https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.control.controlcollection.find