使用字符串名称访问按钮并更改其背景颜色

本文关键字:背景 颜色 按钮 字符串 访问 | 更新日期: 2023-09-27 18:07:06

我需要使用它们的字符串名称访问按钮并更改它们的BackColor属性。

我尝试使用this.control[string key]this.controls.Find(string, bool),但没有这些工作。

 oleDbConnection.Open();
 OleDbCommand command = new OleDbCommand("SELECT * FROM CUSTOMER WHERE FLIGHTNO = '" + variables.depFlightNo + "'", oleDbConnection);
 OleDbDataReader reader = command.ExecuteReader();
 while (reader.Read())
 {
     string seat = reader[3].ToString();
     this.Controls[seat].BackColor = Color.Red;
 }
 reader.Close();

使用字符串名称访问按钮并更改其背景颜色

oleDbConnection.Open();
OleDbCommand command = new OleDbCommand("SELECT * FROM CUSTOMER WHERE FLIGHTNO = '" + variables.depFlightNo + "'", oleDbConnection);
OleDbDataReader reader = command.ExecuteReader();
while (reader.Read())
    {
        string seat = reader[3].ToString();
        foreach (Button s in this.Controls) 
//if the controls are in different place
//like panel or groupbox change "this.Controls" to "groupBox.Controls"
        {
           if (s.Name == seat)
           {
              s.BackColor = Color.Yellow;
           }
        }
    }
    reader.Close();

如果按钮控件包含在不同的容器中而不是表单中,则代码无法找到它们。

您需要使用按钮控制容器而不是this。(分组箱?一个面板?)

所以,例如,如果你的按钮在名为panel1的Panel中你的循环应该更改为

while (reader.Read())
{
    string seat = reader[3].ToString();
    Controls[] found = this.panel1.Controls.Find(seat, false);
    if(found != null && found.Length > 0)
      found[0].BackColor = Color.Red;
}

(增加了对控件名称的检查,以避免在未找到控件时出现异常)