整个窗口单击不起作用的 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) 时更改文本。如何使它在单击窗口上的任意位置时更改文本?
谢谢!
将同一事件处理程序也附加到标签的 Clicked 事件,而不仅仅是表单的事件。在您描述的版本中,单击事件由 Label
控件使用,而不是传递到窗体。
当然,
为Form
和Label
的Click
事件附加相同的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;
}
}