C# 试图弄清楚用户控件是如何工作的

C# 试图弄清楚用户控件是如何工作的,c#,user-controls,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显示

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

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


谢谢你的帮助!谢谢

设计器文件通常仅用于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\u 1了解该结构。

您就不能执行类似UserControl\u 1.UserControl\u 2.Image=。。。或者类似的东西?你不是说userControl_2在userControl_1的面板区域吗?是的!我已经编辑了我的问题!谢谢您根本不应该修改Designer.cs文件。这些文件的全部目的是放置自动生成的代码。你可以随意查看它们生成了什么,但是你不应该修改它们,除非你确定你知道自己在做什么。