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