0

我用 SharpDevelop 创建了一个带有 Mainform.cs、Mainform.Designer.cs 和 Program.cs 文件的简单 C# 程序。

在那,我在 Point(10,10) 处添加了一个标签,格式如下:

l.Text="Welcome";
l.Location=new System.Drawing.Point(10,10);
l.Size=new System.Drawing.Size(100,100);
mainForm.Controls.Add(l);

然后添加了一个事件处理程序,用于识别鼠标在表单上的点击。单击标签以更改其文本时。

l.Text="Clicked";

但它仅在单击小于 (10,10) 的点时更改文本。单击窗口上的任意位置时如何更改文本?

谢谢!

4

2 回答 2

2

将相同的事件处理程序也附加到标签的 Clicked 事件,而不仅仅是表单的事件。在您描述的版本中,Label控件正在使用单击事件,而不是传递给表单。

于 2013-09-21T16:40:17.017 回答
2

当然,为 your和 yourhandlerClick事件附加相同的内容是可以的,但是如果您添加更多具有嵌套关系的容器怎么办?我会通过使用 来寻求解决方案,如下所示:FormLabelglobal Click eventIMessageFilter

public partial class Form1 : Form, IMessageFilter {
   public Form1(){
     InitializeComponent();
     Application.AddMessageFilter(this);
     //Try this to see it in action
     GlobalClick += (s,e) => {
        l.Text = "Clicked";
     };
   }
   public event EventHandler GlobalClick;
   public bool PreFilterMessage(ref Message m){
     if(m.Msg == 0x202){//WM_LBUTTONUP
        EventHandler handler = GlobalClick;
        if(handler != null) handler(this, EventArgs.Empty);
     }
     return false;
   }
}
于 2013-09-21T17:25:30.613 回答