整个窗口单击不起作用的 C#

本文关键字:不起作用 单击 窗口 | 更新日期: 2023-09-27 18:32:26

我用Mainform.cs,Mainform.Designer.cs和Program.cs文件用SharpDevelop创建了一个简单的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) 时更改文本。如何使它在单击窗口上的任意位置时更改文本?

谢谢!

整个窗口单击不起作用的 C#

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

当然,

FormLabelClick事件附加相同的handler是可以的,但是如果您添加更多具有嵌套关系的容器怎么办?我会通过使用IMessageFilter来寻求global Click event解决方案,如下所示:

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;
   }
}