请考虑这是我的第一个非常帖子,我是C#的新人
我正在创建一个包含多个pictureBox的UserControl。这些对象自动命名为pictureBox1,pictureBox2,pictureBox3等。
现在我想通过点击:
来更改相关图像pictureBox1.Image = Properties.Resources.i51;
到目前为止,这么好。但是如何在不为每个事件写一行的情况下分配数字?
pictureBox(1).Image = Properties.Resources.i51;
不起作用,很多其他人也不行。
任何提示?非常感谢提前!
答案 0 :(得分:3)
您可以在用户控件上创建图片框列表:
List<PictureBox> boxes = new List<PictureBox>();
现在,在构造函数中初始化图片框后,将它们添加到列表中:
boxes.Add(pictureBox1);
boxes.Add(pictureBox2);
...
现在让公共财产可见:
public List<PictureBox> Boxes
{
get
{
return this.boxes;
}
}
现在您可以通过以下方式在班级中分配:
Boxes[0].Image = Properties.Resources.i51;
Boxes[1].Image = Properties.Resources.i51;
如果所有内容都发生在同一个类中,则无需创建上述公共属性。
答案 1 :(得分:1)
您可以对{em>示例使用FindControl这样的内容:
int iControlNum = 1;
PictureBox pb = this.FindControl("pictureBox" + iControlNum.ToString())
as PictureBox;
pb.Image = ...;
答案 2 :(得分:1)
将所有图片框填入已提供的msmolka列表中,并为其添加ReadyOnlyCollection:
private List<PictureBox> _PictureBoxes;
private ReadOnlyCollection<PictureBox> _PictureBoxesReadOnly;
在构造函数中实例化它:
public MyUserControl()
{
InitializeComponent();
_PictureBoxes = new List<PictureBox>();
_PictureBoxesReadOnly = _PictureBoxes.AsReadOnly();
}
并使ReadOnlyCollection仅作为IList
:
public IList<PictureBox> PictureBoxes
{
get { return _PictureBoxesReadOnly; }
}
这(在我看来)比msmolka的方法更好。为了使它完美,我也不会将整个PictureBox提供给外部世界,而只将Image
s作为BindingList
。但我认为初学者可以从上面开始,也许以后可以改进这些东西。