我的WinForm C#应用程序上的MouseEvents有问题.
我想在我的应用程序上点击所有鼠标,但我不想在每个子组件中都放置一个监听器,也不要使用Windows鼠标钩子.
在Flash上我可以在Stage上放置一个监听器来获取电影上的所有MouseEvent.
C#上有这样的东西吗?全局MouseListener?
编辑:
我从IMessageFilter ans使用Application.AddMessageFilter创建了这个类.
public class GlobalMouseHandler : IMessageFilter{
private const int WM_LBUTTONDOWN = 0x201;
public bool PreFilterMessage(ref Message m){
if (m.Msg == WM_LBUTTONDOWN) {
// Do stuffs
}
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
并将此代码放在需要监听全局点击的控件上:
GlobalMouseHandler globalClick = new GlobalMouseHandler();
Application.AddMessageFilter(globalClick);
Run Code Online (Sandbox Code Playgroud) 一个旧系统已经到我们办公室进行一些更改和修复,但它也遇到了性能问题.我们不确切知道这种缓慢的根源是什么.
当我们重构旧代码时,我们发现了几个带有以下模式的sql查询(为了示例目的,查询被简化):
SELECT
(
SELECT X
FROM A
WHERE A.id = TABLE.id
) AS COLUMN1,
(
SELECT Y
FROM B
WHERE B.id = TABLE.id
) AS COLUMN1,
(
SELECT Z
FROM C
WHERE C.id = TABLE.id
) AS COLUMN1,
...
FROM
TABLE
WHERE
TABLE.id = @param;
Run Code Online (Sandbox Code Playgroud)
这些查询从它们返回的每个列执行几个内部子查询.
我们计划在以下模式上重写这些查询:
SELECT
A.X, B.Y, C.Z
FROM
TABLE
INNER JOIN A on A.ID = TABLE.ID
INNER JOIN B on B.ID = TABLE.ID
INNER JOIN C on C.ID = TABLE.ID
WHERE
TABLE.id = …Run Code Online (Sandbox Code Playgroud)