通过循环添加控件是可能的吗?

本文关键字:循环 添加 控件 | 更新日期: 2023-09-27 18:17:38

是否可以通过循环添加控件到控件?难点在于名称:它在每个循环中都是相同的,所以我只得到一个名为hu的控件,而不是10个。我如何修改代码以获得10个Border s?

for (int i = 0; i < 10; i++)
{
    Border hu = new Border();
    hu.Width = 10;
    hu.Height = 10;
    hu.Margin = new Thickness(10 * i);
    hu.Background = (Brush) typeof(Brushes).GetProperty(Felder[i]).GetValue(null, null);
    mastergrid.Children.Add(hu);
}

通过循环添加控件是可能的吗?

首先,这是可能的。你能做的就是像这样设置Name

hu.Name = string.Format("Border_{0}", i);

也许不是在边框的情况下,但例如一个按钮。我怎么才能事件中负责控件的数据,因为您绑定了一个事件到多个控件。通常使用Control。标记属性以添加额外的数据并在事件中使用它们。例如:

public MainWindow()
{
    InitializeComponent();
    for (int i = 0; i < 10; i++)
    {
        Border hu = new Border();
        hu.Width = 10;
        hu.Height = 10;
        hu.Margin = new Thickness(10 * i);
        hu.Tag = anyObject;
        hu.MouseDown += new MouseButtonEventHandler(hu_MouseDown);
    }
}
void hu_MouseDown(object sender, MouseButtonEventArgs e)
{
    Border b = (Border)sender;
    // b.Tag contains your "anyObject"
}

请注意,保存您的实例的变量的名称,在您的情况下"hu",是不一样的Name属性的控件。

在您的代码中,您没有创建几个名为"hu"的控件。您创建了几个未命名的控件,本地变量的名称无关紧要。这样做应该是完全没问题的,除非你需要名字。如果需要,可以为每个控件创建一个惟一的名称。