我的用户控件上有一个PictureBox,我在表单上添加了很多用户控件。每当用户点击PictureBox时,他应该获得该PictureBox所属的User Control项目。
因此,在我的用户控件上,我添加了此代码
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的父控件,并尝试从窗体上的picturebox click事件中检索它。但导致失败。如何从PictureBox单击事件中获取usercontrol1对象?
答案 0 :(得分:0)
我确定错误消息(您忘了告诉我们)非常清楚地告诉您错误:pictureBox1.Parent
类型为Control
,因此无法直接分配给{{1}类型的变量1}}。
您必须强制它到usercontrol1
:
usercontrol1
请注意,如果出于任何原因usercontrol1 abc = (usercontrol1)pictureBox1.Parent;
是InvalidCastException
而不是Parent
,则会引发Control
。因此,您最好使用usercontrol1
运算符:
as
或使用C#7中的增强(模式匹配)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
}
运算符:
is