0

我正在尝试根据我在数据库中获得的状态更改几个按钮图像。如果我得到任何状态“0”,我应该将按钮图像更改为“忙碌”图像,因为默认图像是“空闲”图像。

所以我的问题是:如何通过变量名更改按钮?

我现在有这个代码(我知道它错了):

private void checkSuites()
{
    SqlCeCommand checkSuite = new SqlCeCommand("SELECT * FROM RentSessionLog WHERE State='0'", mainConnection);

    SqlCeDataReader readSuite = checkSuite.ExecuteReader();
    int suiteIndex;
    string suitePath = "suite" + suiteIndex;

    while (readSuite.Read())
    {
        suiteIndex = Convert.ToInt32(readSuite["SuiteNum"]);
        suitePath.Image = NewSoftware.Properties.Resources.busySuiteImg;
    }
}
4

3 回答 3

2

它很简单:

while (readSuite.Read())
{
    suiteIndex = Convert.ToInt32(readSuite["SuiteNum"]);
    switch(suiteIndex)
    {
    case 0:
       {
           suitePath.Image = NewSoftware.Properties.Resources.busySuiteImg;
           break;
       }
    default:
       {
           suitePath.Image = NewSoftware.Properties.Resources.freeSuiteImg;
       }
    }
}

编辑:

我使用开关的原因是为了防止将来出现其他状态。您有“忙碌”和“空闲”,但也可能有“保留”,您可能希望有更多的条件,这些条件只会在一个简单的if else if序列中被混淆。

于 2012-12-05T20:56:56.047 回答
1

我相信你需要用来this.Controls.Find(suitePath, true)把你的字符串变成一个控件。我假设这"suite" + suiteIndex.Name你每个按钮的。

string suitePath = "suite" + suiteIndex;
Button suiteButton = this.Controls.Find(suitePath, true);
suiteButton.Image = ...

查看有关 Controls.Find 的更多详细信息

或者,为了更快地访问,您可能希望在其中保留Dictionary<int, Control>每个按钮。

于 2012-12-05T22:46:57.493 回答
0

我做到了!正如胸腺嘧啶所说,使用字典:

                public void checkSuites()
    {
        Dictionary<int, Control> btnList = new Dictionary<int, Control>();
        btnList.Add(1, suite1);
        btnList.Add(2, suite2);
        btnList.Add(3, suite3);
        btnList.Add(4, suite4);
        btnList.Add(5, suite5);
        SqlCeCommand checkSuite = new SqlCeCommand("SELECT * FROM RentSessionLog WHERE State='0'", mainConnection);

        SqlCeDataReader readSuite = checkSuite.ExecuteReader();
        while (readSuite.Read())
        {
            int suiteIndex = Convert.ToInt32(readSuite["SuiteNum"]);
            string suitePath = "suite" + suiteIndex;
            foreach (Button key in btnList.Values)
            {
                if (key.Name == suitePath)
                {
                 key.Image = NewSoftware.Properties.Resources.busySuiteImg;
                }
            }

            }


    }

谢谢所有帮助过的人 :D

于 2012-12-06T00:46:00.790 回答