0

在 Windows 窗体上,我尝试使用 PictureBoxes 作为状态图标。我有 4 个图标,分别代表 Running、Stopped、StartPending 和 StopPending。我不确定如何最好地做到这一点,所以我决定将它们相互堆叠并只使有效的可见。我想出了这样的事情。

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;
}

如果它只是一项服务,我可以接受,但至少有 7 项服务我要检查并认为服务名称旁边的小图标有点多。我有强迫症吗?这不是什么大不了的事,不会让我的代码像我想的那样草率吗?有没有更简单或更好的方法来做到这一点?

4

3 回答 3

2

为什么不使用一个 PictureBox 并在您的 switch 语句中简单地更改正在显示的图像。即: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

每个服务只使用一个图片框,并根据状态分配图像。C# 不会创建图像的额外副本,因此以这种方式使用它们非常好。或者自己绘制整个控件,为每个服务绘制图片,同时只使用一个控件(或整个窗口)作为画布。

于 2012-08-15T10:49:28.047 回答