如何通过名称而不是索引来引用用户控件的子元素?

How to refer to the child elements of User Control by name, not by index?

有2个用户控件(图片中的名称)。我需要访问主用户控件中的子控件并从程序中的任何位置更改它们的属性。

目前,我通过循环获取名称来更改子控件的属性。 (但正如您所见,引用是使用 indexes 进行的,而我想使用将在 IntelliSense 中显示的 names

    private void button1_Click(object sender, EventArgs e) {
        listBox1.Items.Clear();
        listBox1.Items.Add(((UC_NumericUpDown)uC_Main1.Controls[3]).Value = 12); // uC_Numeric1
        listBox1.Items.Add((uC_Main1.Controls[3].Controls[1]).BackColor = Color.Blue); // divider1
        }

    private void button2_Click(object sender, EventArgs e) {
        for (int i = 0; i < uC_Main1.Controls.Count; i++) {
            listBox1.Items.Add(uC_Main1.Controls[i].Name);
        }

        listBox1.Items.Add(((UC_NumericUpDown)uC_Main1.Controls[3]).Value = 55); // uC_Numeric1
        listBox1.Items.Add((uC_Main1.Controls[3].Controls[1]).BackColor = Color.Red); // divider1
    }

这是一个在按下按钮后更改属性的示例:

Controls 集合也有一个接受字符串的索引器:Controls["the name"].BackColor。缺点是此 returns 未明确键入为 Control 的控件。您必须将其转换为更具体的类型才能访问专门的属性。

但您也可以制作控件 public 并直接访问它们。您可以通过更改“设计”部分(在 WnForms 中)中的 Modifiers 属性 来更改属性 window 中控件的访问权限。这会更改控制变量(字段)的 C# 访问修饰符。

这允许您对这些控件进行强类型访问。