试图弄清楚用户控制的工作原理

时间:2012-08-14 16:37:47

标签: c# user-controls

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

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文件中?

提供一些帮助!谢谢!

1 个答案:

答案 0 :(得分: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不需要知道该结构。