我正在尝试根据列表的出现次数更改pictureBox
的图像:
list<string> items = new List<string>();
items.Add("Item1");
items.Add("Item2");
items.Add("Item3");
items.Add("Item4");
items.Add("Item5");
foreach (var item in items.OfType<string>().Select((x, i) => new { x, i }))
{
int ItemNumber = item.i + 1;
string ItemNumberStr = ItemNumber.ToString();
PictureBox pbox = (PictureBox)this.Controls["Picturebox" + ItemNumberStr];
pbox.Image = Properties.Resources.white_square_button;
Label labl = (Label)this.Controls["label" + ItemNumberStr];
labl.Text = item.x;
}
这是在foreach
事件中完成的,其中item.i
是表示为int
的出现次数,然后转换为string
以确定pictureBox
的数量{1}}我正在尝试修改。但是当我这样做时,我在这里收到错误“对象引用没有设置为对象的实例”:
pbox.Image = Properties.Resources.white_square_button;
label
也会发生这种情况。
我做错了什么?
答案 0 :(得分:2)
ControlCollection[String]将不会抛出异常:
Control control = this.Controls["I am not here"];
MessageBox.Show((control == null).ToString());
Properties.Resources
属性为空是值得怀疑的,因此最可能的是您尝试访问的控件不存在或命名有点不同。
答案 1 :(得分:0)
我尝试修改的PictureBoxes
位于panel
,如此处所述:this.Controls doesn't contain all controls通过执行this.Controls["Picturebox" + ItemNumberStr]
它会返回一个空引用,因为PictureBoxes
1}}被分配给该标签。所以我所做的就是将this
替换为panel1
(PictureBoxes
所在的面板的名称),现在它就像魅力一样。
list<string> items = new List<string>();
items.Add("Item1");
items.Add("Item2");
items.Add("Item3");
items.Add("Item4");
items.Add("Item5");
foreach (var item in items.OfType<string>().Select((x, i) => new { x, i }))
{
int ItemNumber = item.i + 1;
string ItemNumberStr = ItemNumber.ToString();
PictureBox pbox = (PictureBox)panel1.Controls["Picturebox" + ItemNumberStr];
pbox.Image = Properties.Resources.white_square_button;
Label labl = (Label)panel1.Controls["label" + ItemNumberStr];
labl.Text = item.x;
}