如何从 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;
请注意,如果出于任何原因 Parent
是 Control
而不是 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
}
我的用户控件上有一个 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;
请注意,如果出于任何原因 Parent
是 Control
而不是 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
}