1

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

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

这是我摆脱下划线的代码:linkLabel1.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline;

4

3 回答 3

2

不幸的是,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 代码有更复杂的逻辑与根据链接是否启用来更改光标有关,但您可能并不关心这一点。

于 2013-11-26T13:31:32.980 回答
0

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

于 2013-11-26T13:34:35.983 回答
0

更新 我更喜欢 Hamido-san在这里的回答。当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);
    }
}
于 2014-08-07T06:05:40.803 回答