2010-11-21 5 views

Antwort

8

Verwenden Control.MouseEnter und Control.MouseLeave und ändern die sender ‚s Eigenschaften im Ereignishandler:

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

Nur Beachten Sie, Font implementiert IDisposeable, so dass Sie die Schriftart entsorgen sollten, bevor Sie es ersetzen. – aqwert

+0

@aqwert: aktualisiert. – ulrichb

+0

ausgezeichnet danke –

0

Zwar gibt es nichts technisch falsch mit der derzeit akzeptierte Antwort ist, wollte ich eine etwas andere Alternative zur Verfügung zu stellen, die ich denke, macht es viel einfacher zu verwalten und zu verfolgen, was hier vor sich geht.

Dieser Ansatz speichert zwei lokale Kopien der Schriftart (eine fett, eine normal). Dann können Sie einfach die Font-Referenzen in Ihren Mausereignissen austauschen, und Sie müssen sich nur um die Entsorgung der Fonts kümmern, wenn Sie Ihre Elternklasse entsorgen (oder wenn Sie die Schriftart ändern).

Auch fügt dies einige Fehlerbehandlung, dass die Menschen vergessen oft, wenn sie mit Schriften und Mausereignisse (nämlich Anprobe fangen die Schrift Schöpfung zu tun, weil es und Aufheben der Registrierung der Maus-Event-Handler kann fehlschlagen, wenn entsorgen.

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