2012-07-30 115 views
1
if(pictureBox1.Tag.ToString() == "accept") 
     { 
      char room1 = Convert.ToChar(lbl_roomid1.Text); 
      row1[13] = (byte)room1; 

      DateTime sdt1 = DateTime.Parse(txt_sdate1.Text); 
      //some code 
     } 
    if (pictureBox2.Tag.ToString() == "accept") 
     { 
      char room2 = Convert.ToChar(lbl_roomid2.Text); 
      row1[13] = (byte)room2; 

      DateTime sdt1 = DateTime.Parse(txt_sdate2.Text); 
      //some code 
     } 

/*如果我想在循環內鍵入此代碼怎麼辦?我需要爲10個pictureboxes */如何使用循環訪問C#中的表單元素?

+0

嘗試使用for循環如果可能的話。因爲foreach適用於實現IEnumerable接口的對象集合。您不能使用foreach從源集合中添加或刪除項目以避免不可預知的副作用。如果您需要添加或刪除源集合中的項目,請使用for循環。 – Narendra 2012-07-30 07:25:18

+0

@Shee跟進:如果你有你想要的答案,不要忘記標記爲正確。問候。 – 2012-07-31 01:24:59

回答

4

像這樣做同樣的:

public void DoMagic(Label label, TextBox textBox) 
    { 
     //... 
    } 

而且這樣的:

 foreach (Control currentControl in this.Controls) 
     { 
      if (currentControl is PictureBox) 
      { 
       if (((PictureBox)currentControl).Tag.ToString().Equals("accept")) 
       { 
        string controlId = currentControl.Name.Remove(0, 11); 
        string labelName = string.Concat("lbl_roomid", controlId); 
        string txtName = string.Concat("txt_sdate", controlId); 

        this.DoMagic(this.Controls.Find(labelName, true)[0] as Label, this.Controls.Find(txtName, true)[0] as TextBox); 
       } 
      } 
     } 

問候

+0

請注意,OP的循環也爲每種情況分別標記和文本框。 – AKX 2012-07-30 07:20:00

+0

@AKX我正在努力 – 2012-07-30 07:21:09

2

你可以做的元素的數組。

以下是有點髒,但是......

class PBRoomDate { 
    // Helper data holder class. Could probably be an anonymous class in C# 4.0 
    public PictureBox PB; 
    public Label RoomLabel; 
    public TextBox DateText; 
    PBRoomDate(PictureBox PB, Label RoomLabel, TextBox DateText) { 
    this.PB = PB; this.RoomLabel = RoomLabel; this.DateText = DateText; 
    } 
} 

// [...] 

var pbRoomDates = new PBRoomDate[]{ 
    new PBRoomDate(pictureBox1, lbl_roomid1, txt_sdate1), 
    new PBRoomDate(pictureBox2, lbl_roomid2, txt_sdate2), 
    new PBRoomDate(pictureBox3, lbl_roomid3, txt_sdate3), 
    // etc. 
}; 

foreach(var pbRoomDate in pbRoomDates) { 
    if(pbRoomDate.PB.Tag.ToString() == "accept") { 
    row1[13] = (byte)Convert.ToChar(pbRoomDate.RoomLabel.Text); 
    DateTime dt = DateTime.Parse(pbRoomDate.DateText.Text); 
    } 
} 

的清潔的解決方案是使用自定義的用戶控件包含每個「圖片框」三個要素打下了那些。如果需要的話,這也會更易於維護和擴展。

0

循環訪問c#中的表單元素。

我通常使用類似這樣的東西。

讓我說我有10個圖片盒我把它命名爲picturebox1 - picturebox10。

然後 做數的循環來10我用一個變量沒有 裏面把這個代碼

String Picturebox = "picturebox" + no.ToString(); 
Control[] oControl = Controls.Find(Picturebox, true); 
foreach(Control foundControl in oControl) 
{ 
    PictureBox foundControlA = foundControl as PictureBox; 
    foundControlA.(methods or property here) = (what you want to put to foundControlA) 

} 

如果你有伴隨着你可以用同樣的方法各控制更多的控制。這裏的提示是我在我的winforms中對我的元素或對象使用了相同的命名約定,並根據需要循環變量no。

相關問題