C # - Исправить ручную метку ссылки

У меня есть две метки ссылок в моей программе форм Windows, которые ссылаются на мой сайт. Я избавился от подчеркивания и уродливого синего цвета и попытался немного их исправить. Но самая большая проблема все еще остается, и это так беспокоит меня, я не знаю, почему.

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

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


person Community    schedule 26.11.2013    source источник
comment
Разве вы не можете просто установить свойство cursor на панели properties в VS?   -  person Ganesh Jadhav    schedule 26.11.2013
comment
Не работает почему-то   -  person    schedule 26.11.2013


Ответы (3)


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

person Will Dean    schedule 26.11.2013
comment
Как и где мне это сделать? Я новичок в С#, и я гуглил об этом, но не могу понять, где я это делаю. - person ; 26.11.2013

Задайте для свойства Cursor значение Arrow на панели свойств LinkLabel в Visual Studio.

person Ganesh Jadhav    schedule 26.11.2013
comment
Это не работает, потому что класс LinkLabel имеет собственную логику для настройки изменения курсора. - person Will Dean; 26.11.2013

Обновление Я предпочитаю ответ Хамидо-сан здесь. Его решение работает правильно, когда 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);
    }
}
person Michael Csikos    schedule 07.08.2014