除非我在MouseMove上设置光标,否则光标会保持重置为默认值

时间:2012-10-05 19:43:15

标签: c# winforms cursor mouseevent

有一个在一个位置有PictureBox的简单表单。我想在输入该控件时将光标更改为十字光标,并在它离开时将其更改回来。

private void Canvas_MouseEnter(object sender, EventArgs e)
    {
        this.Canvas.Cursor = Cursors.Cross;
    }

    private void Canvas_MouseLeave(object sender, EventArgs e)
    {
                    this.Canvas.Cursor = Cursors.Default;
    }

这不起作用。如果我仔细观察,我可以看到它在MouseEnter上快速更改,但它会立即翻转回默认光标。我必须将"this.Canvas.Cursor = Cursors.Cross;"添加到MouseMove事件才能使其正常工作,但随后我可以不断看到它闪回到默认光标。

是什么给出的?这是我整个应用程序中唯一与游标相关的代码,每次移动鼠标时它会导致它重置为默认光标吗?

感谢。

编辑:我是个白痴。我在这个小应用程序上合作的人有一些游标代码隐藏在导致问题的其他地方。谢谢你们。

4 个答案:

答案 0 :(得分:2)

为什么不设置图片框的光标?

yourPictureBox.Cursor = Cursors.Cross;

答案 1 :(得分:0)

我已经从头开始尝试了一个新项目(仅使用了mouseenter / leave处理程序而没有其他任何东西)并且它可以工作。

您的应用程序中可能还有其他内容吗?

答案 2 :(得分:0)

public Form1()
{
  InitializeComponent();
  pictureBox1.MouseHover += new EventHandler(PictureBox1_MouseHover);
}

void pictureBox1_MouseHover(object sender, EventArgs e)
{
  this.PictureBox1.Cursor = Cursors.Cross;
}

您想使用MouseHover事件处理程序。

答案 3 :(得分:0)

在这种情况下可能会发生:

如果您要覆盖控件的WndProc,以使其对诸如以下代码的点击“透明”:

    Const WS_EX_TRANSPARENT As Integer = &H20
    Protected Overrides Sub WndProc(ByRef m As Message)
        Const WM_NCHITTEST As Integer = &H84
        Const HTTRANSPARENT As Integer = -1


        If m.Msg = WM_NCHITTEST Then
            m.Result = CType(HTTRANSPARENT, IntPtr)
        Else
            MyBase.WndProc(m)
        End If
    End Sub

然后它将不显示该控件的光标,而是显示在其下方的光标(至少在某些情况下)