繁体   English   中英

当鼠标悬停在标签上并随后恢复正常状态时,如何使标签变粗体

[英]how to make a label go bold when a mouse go over it and back to normal afterwards

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

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

尽管当前接受的答案在技术上没有任何问题,但我想提供一个略有不同的替代方法,我认为它可以更轻松地管理和跟踪此处发生的情况。

此方法存储了Font的两个本地副本(一个粗体,一个普通)。 然后,您可以在鼠标事件中交换出Font引用,并且只需要担心在处置父类(或更改字体)时就处置Fonts。

此外,这还会增加一些错误处理,人们在处理字体和鼠标事件时常常会忘记这些错误处理(即,尝试捕获字体创建,因为它可能会失败并在处理时取消注册鼠标事件处理程序。

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();
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM