将对象名称与数字组合

时间:2012-02-28 07:45:19

标签: c# syntax

请考虑这是我的第一个非常帖子,我是C#的新人

我正在创建一个包含多个pictureBox的UserControl。这些对象自动命名为pictureBox1,pictureBox2,pictureBox3等。

现在我想通过点击:

来更改相关图像
pictureBox1.Image = Properties.Resources.i51; 
到目前为止,这么好。但是如何在不为每个事件写一行的情况下分配数字?

pictureBox(1).Image = Properties.Resources.i51;

不起作用,很多其他人也不行。

任何提示?非常感谢提前!

3 个答案:

答案 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。但我认为初学者可以从上面开始,也许以后可以改进这些东西。