我需要检测用户何时将鼠标移动到Form及其所有子控件上以及何时离开Form.我尝试了表单的事件MouseEnter和MouseLeave事件,我尝试了WM_MOUSEMOVE&WM_MOUSELEAVE和WM_NCMOUSEMOVE&WM_NCMOUSELEAVE对Windows消息,但似乎没有任何工作,因为我想...
我的大部分表格都被各种各样的儿童控件占据,可见的客户区域不多.这意味着如果我非常快速地移动鼠标,则不会检测到鼠标移动,尽管鼠标位于窗体内.
例如,我有一个停靠在底部,桌面和TextBox之间的TextBox,只有一个非常小的边框.如果我快速将鼠标从底部移动到TextBox中,则不会检测到鼠标移动,但鼠标位于TextBox内部,因此位于Form内部.
我怎样才能达到我的需要?
我正在开发一个WordSearch拼图程序(也称为WordFind),你必须在其中找到大量字母中的某些单词.我正在使用C#WinForms.
我的问题是当我想点击并按住1个字母(Label),然后拖到其他字母来改变它们ForeColor.我试过谷歌搜索但无济于事.
这是我有的:
foreach (Letter a in game.GetLetters())
{
this.Controls.Add(a);
a.MouseDown += (s, e2) =>
{
isDown = true;
a.ForeColor = Color.Yellow;
};
a.MouseUp += (s, e2) =>
{
isDown = false;
};
a.MouseHover += (s, e2) =>
{
if (isDown)
a.ForeColor = Color.Yellow;
};
}
Run Code Online (Sandbox Code Playgroud)
但是,除非未按住鼠标,否则MouseHover事件永远不会触发.还没有运气换MouseHover用MouseEnter.所以,我保留了MouseDown和MouseUp事件并尝试在表单中使用MouseHover:
private void frmMain_MouseHover(object sender, MouseEventArgs e)
{
if (isDown)
{
foreach (Letter l in game.GetLetters())
if (l.ClientRectangle.Contains(l.PointToClient(Control.MousePosition)))
l.ForeColor = Color.Purple;
} …Run Code Online (Sandbox Code Playgroud) 我有一个用于Panel控件的mouseenter和mouseleave事件,当鼠标进入时会改变背景颜色,当它离开时会返回白色.
我也在此面板中有Label控件,但当鼠标进入Label控件时,面板的mouseleave事件将触发.
这是有道理的,但是当鼠标位于其区域而其他控件不会影响它时,如何保持Panel的背景颜色相同?