![](/img/trans.png)
[英]How to make label text underline when i move mouse over it, and then make the label text normal on mouse leave
[英]how to make a label go bold when a mouse go over it and back to normal afterwards
我正在嘗試制作一個標簽,該標簽被動態更改為粗體,沒有任何運氣。
使用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();
}
盡管當前接受的答案在技術上沒有任何問題,但我想提供一個略有不同的替代方法,我認為它可以更輕松地管理和跟蹤此處發生的情況。
此方法存儲了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.