-1

同样,我正在根据这篇文章动态创建按钮,现在我需要相应地隐藏它。如何找到和隐藏按钮。这对我来说是新的,因为我习惯于拖放并用它做事。任何帮助,将不胜感激。先谢谢了。

4

6 回答 6

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;
于 2012-06-20T18:31:34.613 回答
1
var button = (from b in this.Controls.OfType<Button>()
              where b.Name == nameOfButton).First();

button.Hide();
于 2012-06-20T18:31:04.557 回答
0

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

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

例如,如果您的控件位于名为 mypanel 的面板中,则必须编写foreach(Control control in mypanel.Controls) Hope it help

于 2012-06-20T18:30:34.413 回答
0

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

于 2012-06-20T18:31:03.073 回答
0

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

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

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

} 

然后在某处打电话:

SetVisible(this);
于 2012-06-21T07:48:24.620 回答
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

于 2021-04-23T20:31:20.330 回答