在C#Winform应用程序中记录鼠标点击的结果?
我正在尝试在我的Win form应用程序中创建每次鼠标单击的日志,记录单击事件触发的方法或操作。这不仅包括与按钮交互,还包括与桌子、码头等交互(这就是我遇到的问题)。显然,我希望避免进入我之前的所有代码,并为每个事件手动添加日志条目。到目前为止,我已经有了一个MessageFilter,它可以很好地拦截每一次点击,但我还没有弄清楚如何获得关于点击实际作用的正确信息。我可以使用Control.FromHandle(m.HWnd)检测单击的按钮,但无法区分不同的停靠面板。任何关于这方面的信息都将不胜感激;如果我不能很快解决这个问题,我必须手动添加日志条目到所有内容中,我真的很想避免这种情况。谢谢 我尝试了两种可能的方法通过控件检索该信息,请参见下面的Prefilter消息:在C#Winform应用程序中记录鼠标点击的结果?,c#,winforms,io,devexpress,C#,Winforms,Io,Devexpress,我正在尝试在我的Win form应用程序中创建每次鼠标单击的日志,记录单击事件触发的方法或操作。这不仅包括与按钮交互,还包括与桌子、码头等交互(这就是我遇到的问题)。显然,我希望避免进入我之前的所有代码,并为每个事件手动添加日志条目。到目前为止,我已经有了一个MessageFilter,它可以很好地拦截每一次点击,但我还没有弄清楚如何获得关于点击实际作用的正确信息。我可以使用Control.FromHandle(m.HWnd)检测单击的按钮,但无法区分不同的停靠面板。任何关于这方面的信息都将不胜
public bool PreFilterMessage(ref Message m)
{
// if click or doubleclick
if (m.Msg == 0x201 || m.Msg == 0x0203)
{
var oneway = "1st way; " + form.FindForm().ActiveControl.ToString();
string towrite = "";
if (m.Msg == 0x201)
{ towrite += "CLICK : "; }
if (m.Msg == 0x203)
{ towrite += "DBLCLICK : "; }
string anotherway = "1st way; " + "Unknown";
Control ctl = Control.FromHandle(m.HWnd);
if (ctl != null) anotherway = "1st way; " + ctl.Name;
//log manager, just takes the log message string
Admin.Information(towrite + oneway);
Admin.Information(towrite + anotherway);
}
return false;
结果看起来像这样(夹杂着我的评论):
**注意:我正在使用DevExpress替换库存UI控件
//在主视图中选择不同的停靠面板,正如您所看到的那样,第二种方式不会显示任何内容
点击:第一路;DevExpress.xtrabar.Docking.FloatForm,文本:
点击:第二条路
点击:第一路;DevExpress.xtrabar.Docking.FloatForm,文本:
点击:第二条路
点击:第一路;DevExpress.xtrabar.Docking.FloatForm,文本:
点击:第二条路
//点击一个自定义刷新按钮,第二种方式可以选择这个
点击:第一路;DevExpress.xtrabar.Docking.FloatForm,文本:
点击:第二条路;btnRefresh
//单击不同的网格/表格位置,不同的停靠面板,按不同的内容排序,选择整条线。第二种方法能够在适当的网格中检测操作,但不能检测正在执行的操作
点击:第一路;DevExpress.xtrabar.Docking.FloatForm,文本:
点击:第二条路;abcgrid
点击:第一路;DevExpress.xtrabar.Docking.FloatForm,文本:
点击:第二条路;abcgrid
点击:第一路;DevExpress.xtrabar.Docking.FloatForm,文本:
点击:第二条路;abcgrid选择停靠面板/选项卡时检查ctl对象(在第一个示例中返回一个空行),它是System.Windows.Forms.MdiClient