2016-05-10 132 views
0

我有Windows FormTestForm,并在我的Form我有几个标签只用于显示一些文本。单击标签时,Windows窗体单击事件未触发?

只要点击Form,我需要显示MessageBox.Show。所以我有一个event handler的点击,它看起来像这样:

private void TestForm_Click(object sender, EventArgs e) 
{ 
    MessageBox.Show("The form has been clicked"); 
} 

不幸的是,当我点击了一个标签在Form click事件不火。有没有办法解决这个问题,除了消费标签的点击事件?

谢谢。

+0

双击'Label'并在'label_click'事件中写入代码。 –

+0

这是唯一的解决方案吗?捕获每个标签的点击事件? – rbhat

+0

你可以添加相同的点击事件到所有的标签,但是,他们都需要知道你想要什么。 – TaW

回答

1

要使用相同的单击事件的所有标签:

在属性为每个标签,转到Events(闪电标签)。

您将会看到(可能接近顶部)Click的标签,单击此事件的下拉列表,您将看到一个可用于该标签的处理程序列表。

这里的属性>事件>点击处理器(右下):

The properties/events box for the label

因为您的所有标签都是同一类型的,并产生相同EventArgs,您可以使用相同的所有这些处理程序。

然后,当你增加更多的Label S,刚刚从Click事件下拉列表中选择事件处理程序:

enter image description here

希望这有助于!

0

为了充实LarsTech的评论,当我遇到标签互相重叠以及WinForms中缺乏真正透明度的问题时,我曾经使用过类似的东西。我所做的是使标签在窗体上不可见,然后在Form的绘画事件中遍历它们,将信息从它们中拉出来,然后使用Graphics.DrawString来绘制文本。这样,你仍然可以在设计模式下看到它们。

这是我的意思的一个简单例子。

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Paint(object sender, PaintEventArgs e) 
    { 
     foreach (var temp in this.Controls) 
     { 
      if (temp is Label) //Verify that control is a label 
      { 
       Label lbl =(Label)temp; 
       e.Graphics.DrawString(lbl.Text, lbl.Font, new SolidBrush(lbl.ForeColor), new Rectangle(lbl.Location, lbl.Size)); 
      } 
     } 

    } 

    private void Form1_Click(object sender, EventArgs e) 
    { 
     MessageBox.Show("The Form has been clicked"); 
    } 
}