0

Windowsフォームで、PictureBoxをステータスアイコンとして使用しようとしています。実行中、停止済み、StartPending、StopPendingの4つのアイコンがあります。これを行うのに最適な方法がわからなかったので、それらを互いに積み重ねて、有効なものだけを表示することにしました。私はこのようなものを思いついた。

switch (currentServiceStatus)
{
    case "Running":
        pb_startedTestService.Visible = true;
        pb_startingTestService.Visible = false;
        pb_stoppedTestService.Visible = false;
        pb_stoppingTestService.Visible = false;
        break;
    case "StartPending":
        pb_startedTestService.Visible = false;
        pb_startingTestService.Visible = true;
        pb_stoppedTestService.Visible = false;
        pb_stoppingTestService.Visible = false;
        break;
    case "Stopped":
        pb_startedTestService.Visible = false;
        pb_startingTestService.Visible = false;
        pb_stoppedTestService.Visible = true;
        pb_stoppingTestService.Visible = false;
        break;
    case "StopPending":
        pb_startedTestService.Visible = false;
        pb_startingTestService.Visible = false;
        pb_stoppedTestService.Visible = false;
        pb_stoppingTestService.Visible = true;
        break;
}

これは1つのサービスであれば問題ありませんが、少なくとも7つのサービスを確認し、サービス名の横にある小さなアイコンとしてはそれで十分だと思います。私は強迫観念ですか?それはそれほど大したことではなく、私のコードを私が思うほどずさんなものにすることはありませんか?これを行うためのより簡単またはより良い方法はありますか?

4

3 に答える 3

2

1つのPictureBoxを使用して、switchステートメントで表示されている画像を変更するだけです。IE:PictureBox1.Image=..。

また、画像がリソースに読み込まれていると仮定して、それらにアクセスするための構文を次に示します。

PictureBox1.Image = global::(Namespace).Properties.Resources.(PictureName);
于 2012-08-15T10:48:19.417 に答える
1

PictureBox.Imageプロパティを設定してみてください:

Dictionaryコレクションを使用しましたが、実行時にリソースにアクセスするために使用する必要がある場合がありますProperties.Resources

var imageDic = new Dictionary<string, Image>
                    {
                        {"Running", Properties.Resources.YourImageName},
                        {"StartPending", new Bitmap("...")},
                        {"Stopped", new Bitmap("...")},
                        {"StopPending", new Bitmap("...")}
                    };

// and use it:
pb.Image = imageDic[currentServiceStatus];

またはあなたの方法で:

Image imgRunning = ...;
Image imgStartPending = ...;
Image imgStopped = ...;
Image imgStopPending = ...;

switch (currentServiceStatus)
{
    case "Running":
        pb.Image = imgRunning;
        break;
    case "StartPending":
        pb.Image = imgStartPending;
        break;
    case "Stopped":
        pb.Image = imgStopped;
        break;
    case "StopPending":
        pb.Image = imgStopPending;
        break;
}
于 2012-08-15T11:08:02.793 に答える
0

サービスごとに1つの画像ボックスのみを使用し、ステータスに基づいて画像を割り当てます。C#は画像の追加のコピーを作成しないので、そのように使用することはまったく問題ありません。または、コントロール全体を自分で描画し、1つのコントロール(またはウィンドウ全体)のみをキャンバスとして使用して、各サービスの画像を描画します。

于 2012-08-15T10:49:28.047 に答える