C# 获取多个控件并更改属性

C# 获取多个控件并更改属性,c#,winforms,controls,C#,Winforms,Controls,好吧,我的要求解释起来有点复杂。我有一个按钮,单击时执行以下操作: peopleNum = 0; topPosition = 10; public void submitStudent(string name) { peopleNum++; topPosition += 25; ComboBox people_comboBox = new ComboBox(); people_comboBox.Name =

好吧,我的要求解释起来有点复杂。我有一个按钮,单击时执行以下操作:

peopleNum = 0;
topPosition = 10;
public void submitStudent(string name)
    {
        peopleNum++;
        topPosition += 25;

            ComboBox people_comboBox = new ComboBox();
            people_comboBox.Name = "people_comboBox" + peopleNum;
            //ComboBox people_label_finder = this.Controls.Find("people_comboBox" + peopleNum, true).FirstOrDefault as ComboBox;
            people_comboBox.Left = 150;
            people_comboBox.Top = topPosition;

            string[] people_comboBox_itemList = new string[3];
            people_comboBox_itemList[0] = "Present";
            people_comboBox_itemList[1] = "Late";
            people_comboBox_itemList[2] = "Absent";

            people_comboBox.DataSource = people_comboBox_itemList;
            people_comboBox.MouseEnter += new EventHandler(people_comboBox_enter);
            people_comboBox.MouseLeave += new EventHandler(people_comboBox_leave);

        this.Controls.Add(people_comboBox);
    }
对于“人员组合框输入”和“人员组合框离开”的功能,代码如下:

private void people_comboBox_enter(object sender, EventArgs e)
        {
            ComboBox people_comboBox = this.Controls["people_comboBox" + peopleNum] as ComboBox;
            if (people_comboBox != null)
            {
                people_comboBox.BackColor = Color.Red;
            }
        }

        private void people_comboBox_leave(object sender, EventArgs e)
        {
            ComboBox people_comboBox = this.Controls["people_comboBox" + peopleNum] as ComboBox;
            if (people_comboBox != null)
            {
                people_comboBox.BackColor = Color.White;
            }
        }

我想做的是,当鼠标在组合框上时,它会变成红色,当鼠标离开时,它会变成白色。实际结果是,当鼠标位于任意组合框上时(当有多个组合框时),只有最后一个组合框被更改。我怎样才能做到这一点?非常感谢。

不用麻烦使用
此控件。
。触发事件的控件已在
sender

在“进入”和“离开”事件中尝试以下操作:

使用当前方法,
peopleNum
在每次单击
submitststudent
按钮时都会递增。因此,如果您单击它3次,基本上每次都在运行以下代码:

ComboBox people_comboBox = this.Controls["people_comboBox2"] as ComboBox;

旁注:通常人们在对迭代变量执行闭包时会遇到这种情况,但您确实对其进行了显式编码-将last
peopleNum
存储在成员变量中,并对它实际上是最后一个变量感到惊讶…+1使用空检查也会更好。因为如果手动触发事件处理程序,
sender
可能是不同的类型或null。这不太可能,但可能。
ComboBox people_comboBox = this.Controls["people_comboBox2"] as ComboBox;