我的Windows窗体程序中有两个链接标签,链接到我的网站。 我摆脱了下划线和丑陋的蓝色,试图将它们修复一点。 但最大的问题仍然存在,这对我来说太令人不安了,我不知道为什么。
将鼠标悬停在它们上方时,手形光标是旧的Windows 98手动/链接光标。 有没有办法将其更改为系统光标? 我已经检查了一些关于这个问题的其他链接,但我无法让它工作,所以我决定在这里问。
这是我的代码,以摆脱下划线顺便说一句: linkLabel1.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline;
答案 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);
}
}