2016-08-08 39 views
-2

Ich versuche, ein Launcher für ein Spiel zu machen, das einige seiner Fehler behebt. Im Moment arbeite ich gerade an der Schnittstelle und ich möchte benutzerdefinierte Tasten, nicht nur diese generischen Quadrate, aber ich kann nicht herausfinden, wie.Wie mache ich benutzerdefinierte Schaltflächen in Visual Studio?

Hier sind einige Beispielbilder.

Regular button, not moused over.

Moused over/Highlighted button.

Ich warf nur die Tasten schnell zusammen, aber das ist, was ich will. Ich möchte die Schaltfläche markieren, wenn ich Maus darüber, ohne dass es innerhalb der Standard-Quadrat-Schaltflächen ist.

+4

Welche Technologie verwenden Sie für Ihren Launcher? WPF, WinForms, noch etwas? – ChrisF

+0

WinForms, das habe ich leider nicht erwähnt. – ShadyOrb09

Antwort

0

Ich benutzen ein Bildfeld, und dann in meiner Schaltfläche Bild mit einem transparenten Hintergrund hinzugefügt. Dann fügte ein Click-Ereignis, Mauseingabe und Maus verlassen Ereignis hinzu.

1

Dies kann mit einer benutzerdefinierten Schaltfläche ausgeführt werden. This demo von MSDN zeigt Ihnen, wie Sie OnPaint überschreiben und die Bitmaps austauschen, indem Sie auf OnMouseDown und OnMouseUp antworten. Ändern Sie stattdessen die Bitmaps während OnEnter und OnLeave, um das Bild zu ändern, wenn der Mauszeiger sich stattdessen bewegt.

Hier ist ein abgespeckte Beispiel aus der gelinkten Seite:

public class PictureButton : Control 
{ 
    Image staticImage, hoverImage; 
    bool pressed = false; 

    // staticImage is the primary default button image 
    public Image staticImage 
    { 
     get { 
      return this.staticImage; 
     } 
     set { 
      this.staticImage = value; 
     } 
    } 

    // hoverImage is what appears when the mouse enters 
    public Image hoverImage 
    { 
     get { 
      return this.hoverImage; 
     } 
     set { 
      this.hoverImage = value; 
     } 
    } 

    protected override void OnEnter(EventArgs e) 
    { 
     this.pressed = true; 
     this.Invalidate(); 
     base.OnEnter(e); 
    } 

    protected override void OnLeave(EventArgs e) 
    { 
     this.pressed = false; 
     this.Invalidate(); 
     base.OnLeave(e); 
    } 

    protected override void OnPaint(PaintEventArgs e) 
    { 
     if (this.pressed && this.hoverImage != null) 
      e.Graphics.DrawImage(this.hoverImage, 0, 0); 
     else 
      e.Graphics.DrawImage(this.staticImage, 0, 0); 

     base.OnPaint(e); 
    } 
}