0

マウスが他のパネルの上に移動した後、特定の時間パネルを表示する必要があります。この問題はかなり長い間解決されてきました。タイマーを使用しようとしましたが、成功しませんでした。

これは私のコードです:

 this.MouseHover += new EventHandler(myMouseHover);

   [...]
   //event handler
   private void myMouseHover(object sender, EventArgs e)
        {

                this.prevPanel.Visible = true;
                this.nextPanel.Visible = true;

                /* here I want put timer */

                this.prevPanel.Visible = false;
                this.nextPanel.Visible = false;

        }
4

3 に答える 3

1

使用しているタイマーのタイプに応じて、tick イベントに応答してパネルを非表示にするコードを配置する必要があります。

たとえば、System.Windows.Forms.Timer を使用すると、次のようになります。

System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer();

// form constructor
public myForm() 
{
    myTimer.Interval = 1000;    // or whatever you need it to be
    myTimer.Tick += new EventHandler(TimerEventProcessor);   
}

private void myMouseHover(object sender, EventArgs e) 
{
     this.prevPanel.Visible = true;
     this.nextPanel.Visible = true;
     myTimer.Start();
 }

private void TimerEventProcessor(Object myObject, EventArgs myEventArgs) {
     myTimer.Stop();
     this.prevPanel.Visible = false;
     this.nextPanel.Visible = false;
}

他にも使用できるタイマーはありますが、WinForms タイマーには UI スレッドで起動できるという利点があるため、心配する必要はありません。注意すべきことの 1 つは、タイマーが切れる前にマウス ホバー イベントが再び発生した場合に何が起こるかを考える必要があるということです。

最後に、WinForms の代わりに WPF を使用している場合は、アニメーションを使用して XAML ですべてを行うことができます。

于 2012-09-26T13:30:33.697 に答える
1

プロパティを使用Timerおよび定義できますInterval

財産 :

private System.Windows.Forms.Timer aTimer;

初期化 :

    aTimer = new System.Windows.Forms.Timer();

    // Hook up the Elapsed event for the timer.
    aTimer.Tick += new ElapsedEventHandler(OnTimedEvent);

    // Set the Interval to 2 seconds (2000 milliseconds).
    aTimer.Interval = 2000;
    aTimer.Enabled = true;

デリゲート :

private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
      this.prevPanel.Visible = false;
      this.nextPanel.Visible = false;
}
于 2012-09-26T13:16:09.857 に答える
0
System.Timers.Timer timer1 = new System.Timers.Timer ();

timer1.Interval  = periodAfterToStopInMiliseconds;

timer1.Elapsed += timer1_Elapsed;

private void ActLikeIWant(double periodAfterToStopInMiliseconds)
{
    timer1.Start();
}

void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
     var timer = (System.Timers.Timer) sender;

     timer.Stop();

     this.prevPanel.Visible = false;
     this.nextPanel.Visible = false;
}

private void myMouseHover(object sender, EventArgs e)
{
    this.prevPanel.Visible = true;
    this.nextPanel.Visible = true;

    ActLikeIWant(periodAfterToStopInMiliseconds: 200);
}
于 2012-09-26T13:29:48.803 に答える