您未按其編號訪問文本框。你正在通過他們的名字訪問他們,這恰好包括一個數字。如果其名稱在最後包含數字,則可以對任何UI控件執行相同操作,包括PictureBox控件。
您已經有工作代碼。只需更改名稱。
例如
this.Controls["textBox" + i.ToString()].Text = allProducts;
也可能是
this.Controls["pictureBox" + i.ToString()].Text = allProducts;
甚至
this.Controls["MyKeshaThemedCustomControl" + i.ToString()].Text = allProducts;
您的代碼不是類型特異性。只要它繼承自Windows.Forms.Controls.Control,它就可以與任何控件一起使用。他們都有一個Text屬性,所以你的代碼甚至是類型安全的!在這裏限制你的唯一的事情就是你的命名習慣,以及你遵守它的能力。
如果您需要訪問一些屬性,特定於一個PictureBox(如圖像),你可以做這樣的事情:
var p = this.Controls["pictureBox" + i.ToString()].Text as PictureBox;
if (p == null) throw new IndexOutOfRangeException("Late binding is a B*!");
p.Image = GetImage();
如果你敢肯定你永遠不會得到i
錯誤(或者,如果你不關心凌亂除外)可以縮短到
((PictureBox)this.Controls["pictureBox" + i.ToString()]).Image = GetImage();
可能重複的[如何解決在窗體中的文本框的數量?](http://stackoverflow.com/questions/40733855)/how-can-i-address-textboxes-in-windows-forms-by-their-number) –