2013-11-26 3 views
0

У меня есть две метки ссылок в моей программе окон, которая ссылается на мой сайт. Я избавился от подчеркивания и уродливого синего цвета и попытался их немного исправить. Но самая большая проблема все еще остается, и это так беспокоит меня, я не знаю, почему.C# - Fix linklabel hand-cursor

Ручной курсор, когда вы наведите курсор на них, - это старый стрелок для Windows 98/link. Есть ли способ изменить его на системный курсор? Я проверил некоторые другие ссылки об этой проблеме, но я не мог заставить ее работать, поэтому я решил спросить здесь.

Вот мой код, чтобы избавиться от подчеркивания кстати: linkLabel1.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline;

+0

Не может у просто установить 'cursor' свойство в' панели properties' в VS? – P5Coder

+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 имеет гораздо более сложную логику, связанную с изменением курсора в зависимости от того, не ссылка включена, но вам может быть безразлично.

+0

Как и где это сделать? Я новичок в C#, и я обдумал это, но не могу понять, где я это делаю. –

+0

Я отредактировал ответ, чтобы включить что-то, что работает. –

0

Установите Cursor свойство Arrow в свойствах панели LinkLabel в Visual Studio

+0

Не работает, я пробовал это: S –

+0

Это не работает, потому что класс LinkLabel имеет свою собственную логику для настройки изменения курсора –

0

Update Я предпочитаю ответ 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); 
    } 
}