2012-08-15 33 views
0

在Windows窗体上,我试图使用PictureBoxes作为状态图标。我有4个用于运行,停止,StartPending和StopPending的图标。我不确定如何最好地做到这一点,所以我决定把它们堆叠在一起,只做一个有效可见的。我想出了这样的事情。切换PictureBoxes

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个服务我要被检查,并认为这是对旁边的服务名称的小图标有点多。我在迷恋吗?这不是什么大问题,不会让我的代码像我认为的那样草率?有没有更容易或更好的方法来做到这一点?

回答

2

为什么不使用一个PictureBox并在您的switch语句中简单地更改正在显示的图像。 IE:PictureBox1.Image = ...

并假设您已将图片加载到您的资源中,以下是访问它们的语法。

PictureBox1.Image = global::(Namespace).Properties.Resources.(PictureName); 
+0

谢谢,这工作。我是一个白痴,显然没有从正确的角度看待这个问题。 – LazarusG 2012-08-16 19:37:54

+0

我们都在这个或那个点上有罪 – 2012-08-16 20:14:12

0

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

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