2017-05-27 2 views
-2

Sie müssen eine Animation erstellen, die aktiviert wird, wenn Sie auf button klicken. Ich möchte nur die übliche Animation an den Rändern des form. Button1 - zwei Laufstreifen links und rechts gehen nach unten. Button2 - zwei Laufstreifen links und rechts nach oben gehen. Ich brauche das wirklich, aber ich weiß nicht, wie ich es machen soll. Unten ist ein Beispiel für das, was ich brauche, aber diese Animation erzeugt einen laufenden Streifen über dem Programm.Linienanimation

public partial class Form1 : Form 
{ 
    Timer tmr; 
    public Form1() 
    { 
     InitializeComponent(); 
     this.MouseDoubleClick += Form1_MouseDoubleClick; 
     this.Paint += Form1_Paint; 
     tmr = new Timer(); 
     tmr.Interval = 10; 
     tmr.Tick += tmr_Tick; 
    } 

    int x; 
    int step = 5; 
    void Form1_MouseDoubleClick(object sender, MouseEventArgs e) 
    { 
     tmr.Stop(); 
     x = 0; 
     tmr.Start(); 
    } 

    void tmr_Tick(object sender, EventArgs e) 
    { 
     x += step; 
     if (x > this.Width) 
     { 
      x = 0; 
      (sender as Timer).Stop(); 
     } 
     this.Invalidate(); 
    } 
    void Form1_Paint(object sender, PaintEventArgs e) 
    { 
     e.Graphics.FillRectangle(Brushes.Red, 0, 0, x, 4); 
    } 

} 
+0

Können Sie ein Bild veröffentlichen, das den Effekt demonstriert? Es fällt mir schwer, mir vorzustellen, was du meinst. – imqqmi

Antwort

0

ziemlich schwierig zu verstehen, was Sie wollen, aber wenn ich Sie richtig verstanden:

void Form1_Paint(object sender, PaintEventArgs e) 
    { 
    using(Pen pen = new Pen(Color.Red, 4)){ 
     e.Graphics.drawLine(pen, 0, 0, 0, x); 
     e.Graphics.drawLine(pen, Width, x, 0, 0); 
     } 
    } 

Ich tippte es ohne IDE, um dort Fehler sein kann. fix it yourself :)

Die meisten Displays auf 60 Hz laufen, was ~ 17ms pro Rahmen ist, so dass Sie es alle 17ms oder noch besser aktualisieren sollte - nach Bildwiederholfrequenz

Aber es gibt ein Problem: „Timer“ hat nicht diese hohe Auflösung. In meinem Fall - es kann nur alle ~ 30ms aktualisieren. (Letzte Nacht fand ich das, und ich denke, heute müssen krank meine eigene Version von Timer machen.)

Hier meine Mini-Bibliothek ist https://github.com/WithoutCaps/LimitlessUI die Dinge, die Ihnen Interesse geweckt werden, sind: AnimationTimer_WOC, Animator_WOC, MaterialTextBox_WOC (definetely dies überprüfen out) und DropDown_WOC