2009-07-20 6 views
0

DataGrid OnClickのスクロールを制御する2つのボタンを作成しました。ユーザーが押している間、スクロールを管理するコードを実行したいと思います。C#Winformボタンを押してループするイベント

私はMouseDown()を試しましたが、コードは1回だけ実行されます。

ヘルプが必要です。

答えて

4
  • マウスダウンイベントが発生した場合、タイマーを設定して200ミリ秒ごとに「スクロール」コールバック関数を呼び出すように設定します(ランダムな推測時間)。
  • タイマーコールバックでは、1つ「ノッチ」でスクロールします(しかし、それを多くします)。
  • マウスアップイベントが発生したら、タイマーを停止します。
0

主なアイデアは、たとえば100msごとにタイマーを実装し、ティックイベントでロジックを実行することです。アルゴリズムは次のように見ることができます:

  1. キャプチャマウスおよび検出のMouseMoveでMouseDownイベント
  2. にタイマーを開始タイマーティックチェックフラグで何セットフラグ
  3. がボタンの上にマウスではなく、行う場合は、ボタンの上にまだカーソルですあなたはタイマーを使用したくない場合は、あなたのスクロールロジック
  4. リリースマウスキャプチャとは、必要なときにいつでもスレッドを生成することができ、MouseUpイベント
+0

は、私はあなたの方法をやる、君たちに感謝します。 –

1

にタイマーを停止します。他のスレッドにあるUIコントロールを使用する場合は、Invoke()メカニズムを使用するだけで十分注意してください。

コード:もちろん上記

private bool mouseDown = false; 

private void buttonScrollUp_MouseDown(object sender, MouseEventArgs e) 
{ 
    mouseDown = true; 
    new Thread(() => { 
    while (mouseDown) 
    { 
     Invoke(new MethodInvoker(() => [DO_THE_SCROLLING_HERE)); 
     Thread.Sleep([SET_AUTOREPEAT_TIMEOUT_HERE); 
    } 
    }) 
    .Start(); 
} 

private void buttonScrollUp_MouseUp(object sender, MouseEventArgs e) 
{ 
    mouseDown = false; 
} 

コードスニペットは、いくつかの健全性とエラーcheksを欠いています。私はタイマーが重く方法であったと私はこれを行うことができるイベントがあったbeleived思っ

LP、 デヤン

関連する問題