2009-08-19 6 views
1

Ich habe eine Windows Forms-Anwendung mit einigen Tasten für die F-Tasten. Wenn Sie die Maus über die Schaltflächen bewegen, wird die Farbe grau, und wenn Sie klicken, erhalten Sie ein leicht helles Grau. Ich möchte dieses Verhalten mit F-Tastenanschlägen nachahmen ... wie würdest du es tun?Simulieren flache Maustaste MouseDown und MouseOver

+0

Highly mit dieser Frage im Zusammenhang http://stackoverflow.com/questions/1304714/simulating-a-click-with-the-keyboard-in-windows-forms – yeyeyerman

Antwort

1

Schließlich implementiert ich die Taste, um den Hintergrund zu ändern:

class FunctionButton : Button 
{ 
    private Color m_colorOver; 
    private bool m_isPressed; 

    public FunctionButton() : base() 
    { 
     m_isPressed = false; 
    } 

    protected override void OnGotFocus(EventArgs e) 
    { 
     OnMouseEnter(null); 
     base.OnGotFocus(e); 
    } 

    protected override void OnLostFocus(EventArgs e) 
    { 
     if (!m_isPressed) 
     { 
      OnMouseLeave(null); 
     } 

     base.OnLostFocus(e); 
    } 

    protected override void OnMouseLeave(EventArgs e) 
    { 
     if (!Focused && !m_isPressed) 
     { 
      base.OnMouseLeave(e); 
     } 
    } 

    public void FunctionKeyPressed() 
    { 
     // Handle just the first event 
     if (!m_isPressed) 
     { 
      m_isPressed = true; 
      m_colorOver = FlatAppearance.MouseOverBackColor; 
      FlatAppearance.MouseOverBackColor = FlatAppearance.MouseDownBackColor; 

      OnMouseEnter(null); 
      PerformClick();  
     } 
    } 

    public void FunctionKeyReleased() 
    { 
     m_isPressed = false; 
     FlatAppearance.MouseOverBackColor = m_colorOver; 

     if (Focused) 
     { 
      OnMouseEnter(null); 
     } 
     else 
     { 
      base.OnMouseLeave(null); 
     } 
    } 
} 

Es ist nicht die Art und Weise sauber, aber es funktioniert gut. Ich hätte gerne mehr Beispiele mit einem saubereren und eleganteren Stil.

1

Verwenden Sie Button.PerformClick().

+1

, die die Funktionalität aufruft, aber der grafischen Zustand Die Schaltfläche wird nicht geändert. – yeyeyerman

3

der KeyPreview Unterkunft Set Formular true, behandeln Sie die KeyDown und KeyUp Ereignisse, Spur, die Funktionstaste (n) gedrückt werden, und rufen Sie die Invalidate Methode auf die Schaltfläche für jede Taste die ging nach unten oder nach oben.

Behandeln Sie dann das Ereignis der Schaltfläche Paint, und verwenden Sie die ButtonRenderer class, wenn die Taste gedrückt ist, um die Schaltfläche zu zeichnen, als ob es gedrückt wurde.

+0

Ich werde so etwas versuchen. Vielen Dank! – yeyeyerman

+0

Ich arbeite nicht, da Flat Buttons mit ButtonRenderer nicht gerendert werden können: -o – yeyeyerman

Verwandte Themen