相关疑难解决方法(0)

如何检测鼠标是否在整个表单和子控件内?

我需要检测用户何时将鼠标移动到Form及其所有子控件上以及何时离开Form.我尝试了表单的事件MouseEnterMouseLeave事件,我尝试了WM_MOUSEMOVE&WM_MOUSELEAVEWM_NCMOUSEMOVE&WM_NCMOUSELEAVE对Windows消息,但似乎没有任何工作,因为我想...

我的大部分表格都被各种各样的儿童控件占据,可见的客户区域不多.这意味着如果我非常快速地移动鼠标,则不会检测到鼠标移动,尽管鼠标位于窗体内.

例如,我有一个停靠在底部,桌面和TextBox之间的TextBox,只有一个非常小的边框.如果我快速将鼠标从底部移动到TextBox中,则不会检测到鼠标移动,但鼠标位于TextBox内部,因此位于Form内部.

我怎样才能达到我的需要?

c# mouseevent detection winforms

7
推荐指数
1
解决办法
2万
查看次数

MouseHover在鼠标关闭时不会触发

我正在开发一个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事件永远不会触发.还没有运气换MouseHoverMouseEnter.所以,我保留了MouseDownMouseUp事件并尝试在表单中使用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)

c# winforms mousehover

5
推荐指数
1
解决办法
357
查看次数

C#Windows窗体鼠标事件问题中的自定义控件

我有一个用于Panel控件的mouseenter和mouseleave事件,当鼠标进入时会改变背景颜色,当它离开时会返回白色.

我也在此面板中有Label控件,但当鼠标进入Label控件时,面板的mouseleave事件将触发.

这是有道理的,但是当鼠标位于其区域而其他控件不会影响它时,如何保持Panel的背景颜色相同?

c# events winforms

4
推荐指数
1
解决办法
9071
查看次数

标签 统计

c# ×3

winforms ×3

detection ×1

events ×1

mouseevent ×1

mousehover ×1