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「Busy」と「Free」がありますが、「Reserved」もある可能性があり、単純なシーケンスで難読化されるだけの条件がさらに必要になる場合があります。

于 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

やったよ!Thymineが言ったように辞書を使用して:

                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 に答える