0

我制作了一个控件库和两个用户控件。

userControl_1 contains a Panel and an ImageList that I have "loaded" with
images in design time.

userControl_2 contains a PictureBox

我已将 userControl_1 放在 Windows 窗体上。userControl_2 位于 userControl_1 的面板区域。

目标是从 imageList 中选择一个图像并用 pictureBox 显示它,如下所示:

nameOfPictureBox.Image = nameOfList.Image[number]

但我不让它工作。我不明白如何在用户控件之间进行通信?我猜上面的代码应该在userControl_1里面?但是我应该把代码放在哪里,在 userControl_1.cs 类文件或 userControl_1.Designer.cs 文件中?

一些帮助!谢谢!

4

1 回答 1

2

设计器文件一般只用于 web 控件定义,并且是生成的,所以不应该是你的代码的地方。

您将希望将任何功能扩展到用户控件的代码隐藏文件 (.cs) 中。

从用户控件公开数据的一种简单方法是在用户控件后面的代码中创建公共属性,以封装控件的知识但仍公开数据。

在 UserControl_2 类上是这样的:

public Image PictureBoxImage{
    get { return pictureBox.Image; }
    set { pictureBox.Image = value; }
}

然后,您可以使用一个简单的属性来隐藏控件的内部结构,但仍然允许您的 UserControl_1 代码在后面设置它。

然后可以调整 KDiTraglia 的代码以执行以下操作:

foreach(var item in this.Panel)
{
    if (item is UserControl_2)
    {
         var ctrl = (UserControl_2)item;
         ctrl.PictureBoxImage = ...
    }
}

然后,这允许用户控件向下委派给适当的内部控件,而 UserControl_1 不需要了解该结构。

于 2012-08-14T16:50:54.390 回答