C# - 修复linklabel手形光标

时间:2013-11-26 13:27:46

标签: c# winforms cursor linklabel

我的Windows窗体程序中有两个链接标签,链接到我的网站。 我摆脱了下划线和丑陋的蓝色,试图将它们修复一点。 但最大的问题仍然存在,这对我来说太令人不安了,我不知道为什么。

将鼠标悬停在它们上方时,手形光标是旧的Windows 98手动/链接光标。 有没有办法将其更改为系统光标? 我已经检查了一些关于这个问题的其他链接,但我无法让它工作,所以我决定在这里问。

这是我的代码,以摆脱下划线顺便说一句: linkLabel1.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline;

3 个答案:

答案 0 :(得分:1)

不幸的是,LinkLabel类是硬编码的,使用Cursors.Hand作为悬停游标。

但是,您可以通过向项目中添加这样的类来解决此问题:

public class MyLinkLabel : LinkLabel
{
    protected override void OnMouseEnter(EventArgs e)
    {
        base.OnMouseEnter(e);
        OverrideCursor = Cursors.Cross;
    }

    protected override void OnMouseLeave(EventArgs e)
    {
        base.OnMouseLeave(e);
        OverrideCursor = null;
    }

    protected override void OnMouseMove(MouseEventArgs e)
    {
        base.OnMouseMove(e);
        OverrideCursor = Cursors.Cross;
    }
}

并在表单上使用它而不是LinkLabel。 (这会将光标设置为十字形以进行测试,但您可以将其更改为您想要的任何内容。)

我应该说真正的LinkLabel代码具有更复杂的逻辑,可以根据链接是否已启用来更改光标,但您可能并不关心。

答案 1 :(得分:0)

在Visual Studio的LinkLabel的属性窗格中将Cursor属性设置为Arrow

答案 2 :(得分:0)

<强>更新 我更喜欢Hamido-san的回答here。当LinkLabel设置为AutoSize = false并使用LinkArea时,他的解决方案可以正常运行。

旧解决方案:

public class LnkLabel : LinkLabel
{
    const int WM_SETCURSOR =    32,
              IDC_HAND     = 32649;

    [DllImport("user32.dll")]
    public static extern int LoadCursor(int hInstance, int lpCursorName);

    [DllImport("user32.dll")]
    public static extern int SetCursor(int hCursor);

    protected override void WndProc(ref Message m)
    {
        if (m.Msg == WM_SETCURSOR)
        {
            int cursor = LoadCursor(0, IDC_HAND);

            SetCursor(cursor);

            m.Result = IntPtr.Zero; // Handled

            return;
        }

        base.WndProc(ref m);
    }
}