我有一个用户控件
public partial class ButtonControl : UserControl
有两个标签和图片框控件
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.text = new System.Windows.Forms.Label();
我在windows窗体中使用过这个控件
this.appointmentButton = new DentalSoft.UI.Controls.ButtonControl();
创建了一个活动
this.appointmentButton.Click += new System.EventHandler(this.appointmentButton_Click);
但问题是,如果我点击控件内部的图像或标签,则不会触发点击事件。 无论用户在控件内部单击何处,我都要触发此单击事件。有可能吗?
答案 0 :(得分:8)
是的,这很简单。当您单击子控件时,他们会收到click事件,而用户控件则不会。因此,您可以订阅子控件单击事件,当它们发生时,只需引发usercontrol单击事件,无论鼠标位于何处,它都会显示为单击。
只需双击图片框和标签即可创建点击事件处理程序,然后添加一行代码以调用父usercontrol OnClick方法。
private void text_Click(object sender, EventArgs e)
{
this.OnClick(new EventArgs());
}
private void pictureBox1_Click(object sender, EventArgs e)
{
this.OnClick(new EventArgs());
}
答案 1 :(得分:0)
我通过以下方式解决了这个问题。我想在单击子Label时更改父PictureBox的背景图像。我玩了一些,发现可以通过以下方式调用事件处理程序。
private void Label_Click(object sender, EventArgs e)
{
Label label = (Label)sender;
Box_Click(label.Parent, e);
}
private void Box_Click(object sender, EventArgs e)
{
//
PictureBox box = sender as PictureBox;
//
if (isMine[int.Parse(box.Name)])
{
box.Image = Image.FromFile(@"..\..\images\BoxRedX.jpg");
MessageBox.Show("Game Over");
}
else
{
box.Image = Image.FromFile(@"..\..\images\BoxGray.jpg");
}
}
如您所见,我抓住了孩子,并使用它来引用其父对象并将其发送给父母click事件。这是我在项目中使用的代码。重要的方法是首先列出的。第二个是为了清楚起见,以了解它是如何通过和工作的。