如何从 PictureBox 获取用户控件

How to get User Control from a PictureBox

我的用户控件上有一个 PictureBox,我在我的表单上添加了很多这个用户控件。事情是每当用户点击 PictureBox 他应该得到这个 PictureBox 所属的用户控件项。

所以,在我的用户控件上,我添加了这段代码

  public usercontrol1()
   {
      InitializeComponent();
      pictureBox1.Parent = this;
   }

然后在我的表格

  private void form1_Load(object sender, EventArgs e)
   {
       var c = new usercontrol1();
       c.pictureBox1.Click += item_click;
       c = new usercontrol1();
       c.pictureBox1.Click += item_click;
   }

   private void item_click(object sender, EventArgs e)
   {
       usercontrol1 abc = pictureBox1.Parent; // Giving Error
   }

我尝试使用这种方法将用户控件设置为图片框的父控件,并尝试从表单上的图片框单击事件中检索它。但是导致失败。如何从 PictureBox 单击事件中获取 usercontrol1 对象?

我确定错误消息(你忘了告诉我们)非常清楚地告诉你出了什么问题:pictureBox1.Parent 是类型 Control 因此不能直接分配给类型的变量usercontrol1.

你必须usercontrol1:

usercontrol1 abc = (usercontrol1)pictureBox1.Parent;

请注意,如果出于任何原因 ParentControl 而不是 usercontrol1,这将抛出 InvalidCastException。所以你最好使用 as 运算符:

private void item_click(object sender, EventArgs e)
{
    usercontrol1 abc = pictureBox1.Parent as usercontrol1;
    if (abc == null) return; // as returns null if the cast fails

    // do something with abc
}

或在 C#7 中使用增强的(模式匹配)is 运算符:

private void item_click(object sender, EventArgs e)
{
    if (!pictureBox1.Parent is usercontrol1 abc) return;

    // do something with abc
}