簡體   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