【问题标题】:C# - Fix linklabel hand-cursorC# - 修复链接标签手形光标
【发布时间】:2016-12-09 08:23:33
【问题描述】:

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

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

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

【问题讨论】:

  • 你不能在 VS 的 properties 窗格中设置 cursor 属性吗?
  • 由于某种原因不起作用

标签: c# winforms cursor linklabel


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

【讨论】:

  • 如何以及在哪里执行此操作?我是 C# 的新手,我用谷歌搜索过,但似乎不明白我在哪里做的。
【解决方案2】:

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

【讨论】:

  • 这不起作用,因为 LinkLabel 类有自己的设置更改光标的逻辑
【解决方案3】:

更新 我更喜欢 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);
    }
}

【讨论】:

    猜你喜欢
    • 2018-11-20
    • 1970-01-01
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多