как сделать ярлык жирным, если навести на него курсор мыши и вернуться к нормальному состоянию после этого - PullRequest
1 голос
/ 22 ноября 2010

Я пытаюсь сделать ярлык, который был динамически изменен на жирный шрифт без какой-либо удачи.

Ответы [ 2 ]

8 голосов
/ 22 ноября 2010

Используйте Control.MouseEnter и Control.MouseLeave и измените свойства sender в обработчике событий:

private void label1_MouseEnter(object sender, EventArgs e)
{
    var font = ((Label)sender).Font;

    ((Label)sender).Font = new Font(font, FontStyle.Bold);

    font.Dispose();
}

private void label1_MouseLeave(object sender, EventArgs e)
{
    var font = ((Label)sender).Font;

    ((Label)sender).Font = new Font(font, FontStyle.Regular);

    font.Dispose();
}
0 голосов
/ 19 августа 2015

Хотя в текущем принятом ответе нет ничего технически неправильного, я хотел предложить несколько иную альтернативу, которая, на мой взгляд, значительно облегчает управление и отслеживание происходящего здесь.

Этоподход хранит две локальные копии шрифта (один жирный, один нормальный).Затем вы можете просто поменять ссылки на шрифты в событиях мыши, и вам нужно беспокоиться только об утилизации шрифтов, когда вы избавляетесь от родительского класса (или когда вы меняете шрифт).

Кроме того, этодобавляет некоторую обработку ошибок, которую люди часто забывают при работе с событиями Fonts и Mouse (а именно try-catch создания Font, потому что он может завершиться ошибкой и отменить регистрацию обработчиков событий мыши при утилизации.

public class MyClass
{
    Font _normalFont;
    Font _boldFont;

    public MyClass() : IDisposble
    {
        try
        {
            _normalFont = new Font("Arial", 9);
            _boldFont = new Font("Arial", 9, FontStyle.Bold);
        }
        catch
        {
            //error handling
        }

        label1.MouseEnter += label1_MouseEnter;
        label1.MouseLeave += label1_MouseLeave;
    }

    private void label1_MouseEnter(object sender, EventArgs e)
    {
        var font = ((Label)sender).Font;

        ((Label)sender).Font = new Font(font, FontStyle.Bold);

        font.Dispose();
    }

    private void label1_MouseLeave(object sender, EventArgs e)
    {
        var font = ((Label)sender).Font;

        ((Label)sender).Font = new Font(font, FontStyle.Regular);

        font.Dispose();
    }

    public void Dispose()
    {
        label1.MouseEnter -= label1_MouseEnter;
        label1.MouseLeave -= label1_MouseLeave;

        if(_normalFont != null)
        {
            _normalFont.Dispose();
        }

        if(_boldFont != null)
        {
            _boldFont.Dispose();
        }
    }
}
...