我有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
中的标签时,点击事件不会触发。有没有办法解决这个问题,除了消费标签的点击事件?
感谢。
答案 0 :(得分:1)
对所有标签使用相同的点击事件:
在每个标签的属性中,转到Events
(闪电标签)。
您将看到(可能在顶部附近)Click
的标签,单击此事件的下拉列表,您将看到可用于该标签的处理程序列表。
这是属性>活动>单击处理程序(右下角):
由于您的所有标签属于同一类型,并生成相同的EventArgs
,因此您可以对所有标签使用相同的处理程序。
然后,当您添加更多Label
时,只需从Click
事件下拉列表中选择事件处理程序:
希望这有帮助!
答案 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");
}
}