当鼠标移过它并之后恢复正常时,如何使标签变为粗体

时间:2010-11-21 23:30:04

标签: c# winforms mouse

我正在尝试制作一个动态更改为粗体字的标签而没有任何运气。

2 个答案:

答案 0 :(得分:8)

使用Control.MouseEnterControl.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();
}

答案 1 :(得分:0)

虽然目前接受的答案在技术上没有任何问题,但我想提供一个稍微不同的替代方案,我认为这样可以更容易管理和跟踪这里发生的事情。

此方法存储两个Font的本地副本(一个粗体,一个普通)。然后,您可以在鼠标事件中替换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();
        }
    }
}