2017-06-19 60 views
1

enter image description hereC#windows窗體管理多個圖像的可見性

我有一個車輛的可能位置的地圖。我想在這個頂部顯示像黑點一樣的圖像,以顯示每個時刻的位置。 ,我看到的唯一方法是在地圖上的每個可能的位置的頂部顯示一個定位圖像,然後更新一個接一個:

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

    } 

有沒有更有效的方式來做到這一點?

回答

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

鴕鳥政策瞭解foo的,是它像一個載體? – DDDD

+0

Foo是枚舉類型。枚舉基本上是作爲字符串來使事情可讀。使用它們是很好的做法。 – RoundSauce3

+0

我從套接字接收位置作爲字符串,是否有更簡單的方法來更新圖片元素的可見性?像if(b.text ==「R1」)b.visible = true else b.visible = false? – DDDD

1

我收到從插座一個字符串的位置,有沒有 更新一個更簡單的方法像素的知名度? like 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; 
}