2010-11-21 15 views

cevap

8

Kullanım Control.MouseEnter ve Control.MouseLeave ve olay işleyicisinde sender 'ın özelliklerini değiştirmek: şu anda kabul cevapla teknik olarak yanlış bir şey yok iken

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

Farkında olmak için, Yazı tipini değiştirmeden kullanabilmeniz için yazı tipini kullanmanız gerekir. – aqwert

+0

@aqwert: – ulrichb

+0

mükemmel Teşekkür ederim –

0

, sanırım biraz farklı bir alternatif sunmak istedik Burada neler olup bittiğini takip etmek ve takip etmek çok daha kolay. Bu yaklaşım, Yazı tipinin iki yerel kopyasını (bir kalın, bir normal) kaydeder. Ardından, fare olaylarınızda Yazı tipi referanslarını değiştirebilir ve yalnızca üst sınıfınızı elden çıkarırken (veya yazı tipini değiştirdiğinizde) Yazı Tiplerinin imha edilmesi konusunda endişelenmeniz gerekir.

Ayrıca, bu yazı tipleri ve Fare olayları ile uğraşırken bu başarısız olabilir çünkü insanlar genellikle (yani Yazı oluşturma deneyin-yakalamak unutmak taşıma ve bertaraf ederken fare olay işleyicileri kaydını bazı hata ekler. Sadece

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