C#窗体管理多个图像可见性

时间:2017-06-19 12:16:19

标签: c# .net windows-forms-designer

enter image description here

我有一张车辆可能位置的地图。我想在这个图像的顶部显示一个像黑点的图像,以显示每个时刻的位置。我看到的唯一方法是在地图上的每个可能位置的顶部显示一个定位图像,然后逐个更新:

pic_position_r1.Visible = false;
pic_position_r2.Visible = false;
pic_position_r3.Visible = false;
...
pic_position_g1.Visible = false;
...
pic_position_b1.Visible = false;
...

switch (position)
    {
        case "R1": pic_position_r1.Visible = true; break;
        case "R2": pic_position_r2.Visible = true; break;
        ...
        case "G1": pic_position_g1.Visible = true; break;
        ...
        case "B1": pic_position_b1.Visible = true; break;
        ...

    }

有更有效的方法吗?

2 个答案:

答案 0 :(得分:1)

您可以将控件存储在一个数组中,并使用枚举以便于访问。

public enum foo
{
  r1,
  g2
}

public void urMom()
{
  PictureBox[] obj = new PictureBox[]
  {
      pic_position_r1,
      pic_position_g2
  };

  foreach(PictureBox b in obj)
    b.Visible = false;

  obj[Convert.ToInt32(foo.g2)].Visible = true;
}

答案 1 :(得分:1)

  

我从套接字接收字符串的位置,是否有更简单的方法   更新图片元素的可见性?喜欢if(b.text ==" R1")   b.visible = true else b.visible = false?

只需搜索就可以使用Controls.Find()这样的对应控件:

string position = "R1"; // string from your socket
string ctlName = "pic_position_" + position.ToLower(); // build up control name from the received string
Control match = this.Controls.Find(ctlName, true).FirstOrDefault(); // find the control
if (match != null) // see if a match was found
{
    match.Visible = true;
}
相关问题