

C#でビデオ再生をするプログラムを作っています。  
マウスホイールによるコマ送り再生を実装したいのですが表題の事例が発生してしまいます。

起動直後はちゃんと1回だけ呼び出されるのですが、フォーム内をクリックする等をしてアクティブなコントロールがある状態になると2回呼び出されてしまいます。

イベントはメインフォームにのみ

[code]

    this.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.frmMainForm_MouseWheel)
    
[/code]

の形で登録しています。

今は

[code]

    if (this.ActiveControl != null)
    {
        frameSec = frameMSec / 2;
    }
    
[/code]

というようにアクティブなコントロールがあれば、1コマの半分の時間だけ動画を進めるという形をとっているのですが、このような対症療法的なものではなく根本的な解決法が知りたいです。

どうすれば2回目の呼び出しを回避できるのでしょうか？

そもそも、何故2回呼び出されてしまうのでしょうか？


CC BY-SA 3.0
2015-06-30T10:01:59.607
11890
2015-08-29T11:53:03.780
8521
question
c#
マウスホイールのイベントが2回呼び出されてしまう


情報が少なくて何とも言えませんが、イベントハンドラーの追加処理

[code]

    this.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.frmMainForm_MouseWheel);
    
[/code]

がデザイナーではなくコーディングによって追加されているのであれば、何らかの理由で2回追加されているだけかもしれません。

もし、

[code]

    this.MouseWheel -= new System.Windows.Forms.MouseEventHandler(this.frmMainForm_MouseWheel);
    this.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.frmMainForm_MouseWheel);
    
[/code]

と追加の前に削除を行って改善するのであれば上記の理由だと判断できます。


CC BY-SA 3.0
2015-06-30T10:26:29.663
11893
2015-06-30T10:26:29.663
5750
11890
answer