请考虑到这是我的第一篇文章,而且我是C#的新手。
我正在创建一个具有多个pictureBoxes的UserControl。这些对象会自动命名为pictureBox1、pictureBox2、pictureBox3等。
现在,我想通过单击更改关联的图像:
pictureBox1.Image = Properties.Resources.i51; 到现在为止还好。但是如何在不为每个事件编写一行的情况下分配编号呢?
pictureBox(1).Image = Properties.Resources.i51;不能工作,很多人也不能工作。
有什么提示吗?首先要感谢大家!
发布于 2012-02-28 16:08:14
将你所有的图片框填入一个列表,比如已经提供的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的方法更好。为了使它更完美,我也不会将整个PictureBoxes提供给外部世界,而是只将Images作为BindingList。但我认为对于初学者来说,你可以从上面开始,也许以后会改进这些东西。
发布于 2012-02-28 15:51:46
您可以在用户控件上创建图片框列表:
List<PictureBox> boxes = new List<PictureBox>();现在,在构造函数中初始化图片框后,将它们添加到列表中:
boxes.Add(pictureBox1);
boxes.Add(pictureBox2);
...现在通过byu公共属性使其可见:
public List<PictureBox> Boxes
{
get
{
return this.boxes;
}
}现在,您可以通过以下方式在类中进行赋值:
Boxes[0].Image = Properties.Resources.i51;
Boxes[1].Image = Properties.Resources.i51;如果所有内容都在同一个类中,则不需要创建上面的公共属性。
发布于 2012-02-28 15:48:04
您可以使用FindControl来做这样的事情,例如
int iControlNum = 1;
PictureBox pb = this.FindControl("pictureBox" + iControlNum.ToString())
as PictureBox;
pb.Image = ...;https://stackoverflow.com/questions/9478151
复制相似问题