我有两个链接标签在我的窗口窗体程序,链接到我的网站。我消除了下划线和丑陋的蓝色,并试图弥补他们一点点。但最大的问题仍然存在,这对我来说太麻烦了,我不知道为什么。
当您悬停在它们上面时,手光标是旧的Windows 98手动/链接游标。有没有办法将其更改为系统游标?我检查了一些关于这个问题的其他链接,但是我无法让它开始工作,所以我决定在这里问。
下面是我去掉下划线btw的代码:#en0#Label1.LinkBehavior= System.Windows.Forms.LinkBehavior.NeverUnderline;
发布于 2013-11-26 13:31:32
不幸的是,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-26 13:34:35
在Visual中的“属性”窗格中将Cursor属性设置为Arrow
发布于 2014-08-07 06:05:40
我更喜欢Hamido的答案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);
}
}https://stackoverflow.com/questions/20218374
复制相似问题