单击标签时未触发Windows窗体单击事件?

时间:2016-05-10 19:14:42

标签: c# forms winforms

我有Windows Form TestForm ,在我的Form我有几个标签,仅用于显示一些文字。

我需要在点击MessageBox.Show的任何时候显示Form。所以我点击了event handler,如下所示:

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

不幸的是,当我点击Form中的标签时,点击事件不会触发。有没有办法解决这个问题,除了消费标签的点击事件?

感谢。

2 个答案:

答案 0 :(得分:1)

对所有标签使用相同的点击事件:

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

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

这是属性>活动>单击处理程序(右下角):

The properties / events box for the label

由于您的所有标签属于同一类型,并生成相同的EventArgs,因此您可以对所有标签使用相同的处理程序。

然后,当您添加更多Label时,只需从Click事件下拉列表中选择事件处理程序:

enter image description here

希望这有帮助!

答案 1 :(得分: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");
    }
}