none
マウスホイールでタブ移動をしたい RRS feed

  • 質問

  •  

    VB2005で開発しています。

     

    タブコントロールのタブ上で、マウスホイールを回したときに、

    1回転ごとにタブ移動したいと思っています。

    下に回したら右へ移動し、上に回したら左に移動したいです。

     

    タブコントロールでは、どのようにイベントを取得して、

    1回転をどのように判断したら良いのでしょうか?

     

    もしご存知でしたら教えて頂けませんか?

    要件が満たせるのであれば、他の方法でもかまいません。

    ぜひ、よろしくお願い致します。

    2008年6月1日 5:30

回答

  • コンドルさん、こんにちは

    ダッチです。

     

     コンドル さんからの引用
    タブコントロールでは、どのようにイベントを取得して

    他のコントロールと同様に MouseWheel イベントを利用すればいいと思います。

     

     コンドル さんからの引用
    1回転をどのように判断したら良いのでしょうか?

    これは MouseWheel イベントの引数である MouseEventArgs クラスの Delta プロパティの値を参照すればわかります。

    詳細は MSDN を参照してください。簡単に言うと、Delta プロパティの値が、正の値だとホイールを上に回した時で、負の値だとホイールを下に回した時です。

     

    Control.MouseWheel イベント

    http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.mousewheel(VS.80).aspx

     

    あとはどうやってタブ上でのホイールを検出するかですが、これはタブの領域を取得することで判断できます。

    タブ領域の高さは TabControl.ItemSize プロパティから取得できます。ItemSize プロパティはタブのサイズを表します。

    タブ領域の幅は TabControl の Width をそのまま使用すればいいと思います。

     

    コードにすると次のようになります。

    Code Snippet

    Private Sub TabControl1_MouseWheel(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TabControl1.MouseWheel
        Dim r As New Rectangle(0, 0, Me.TabControl1.Width, Me.TabControl1.ItemSize.Height)

        If r.Contains(e.Location) Then
            If e.Delta > 0 Then
                Console.WriteLine("上回転")
            Else
                Console.WriteLine("下回転")
            End If
        End If
    End Sub

     

     

     

    2008年6月1日 6:23
  • Web上にあるMSDNではなく、ローカルにインストールされる、Visual Studio 2008(英語版)のドキュメントでSystem.Windows.Forms.ControlクラスのMouseWheelイベントを確認すると、MoseWheelイベントは以下のようにBrowsableAttribute(false)と定義されているみたいです。なので、デザイナ上のプロパティウィンドウのイベントに表示されないのだと思います。

     

    Code Snippet
    [BrowsableAttribute(false)]
    public event MouseEventHandler MouseWheel

     

     

    2008年6月1日 12:10

すべての返信

  • コンドルさん、こんにちは

    ダッチです。

     

     コンドル さんからの引用
    タブコントロールでは、どのようにイベントを取得して

    他のコントロールと同様に MouseWheel イベントを利用すればいいと思います。

     

     コンドル さんからの引用
    1回転をどのように判断したら良いのでしょうか?

    これは MouseWheel イベントの引数である MouseEventArgs クラスの Delta プロパティの値を参照すればわかります。

    詳細は MSDN を参照してください。簡単に言うと、Delta プロパティの値が、正の値だとホイールを上に回した時で、負の値だとホイールを下に回した時です。

     

    Control.MouseWheel イベント

    http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.mousewheel(VS.80).aspx

     

    あとはどうやってタブ上でのホイールを検出するかですが、これはタブの領域を取得することで判断できます。

    タブ領域の高さは TabControl.ItemSize プロパティから取得できます。ItemSize プロパティはタブのサイズを表します。

    タブ領域の幅は TabControl の Width をそのまま使用すればいいと思います。

     

    コードにすると次のようになります。

    Code Snippet

    Private Sub TabControl1_MouseWheel(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TabControl1.MouseWheel
        Dim r As New Rectangle(0, 0, Me.TabControl1.Width, Me.TabControl1.ItemSize.Height)

        If r.Contains(e.Location) Then
            If e.Delta > 0 Then
                Console.WriteLine("上回転")
            Else
                Console.WriteLine("下回転")
            End If
        End If
    End Sub

     

     

     

    2008年6月1日 6:23
  • ありがとうございます。

    無事解決できました。

     

    ただここでひとつ質問なのですが、

    TabControlを選択してプロパティウィンドウでMouseWheelイベントを探しても

    見付かりません。(VB2008で確認しました。)

     

    なぜプロパティウィンドウには表示されないのでしょうか?

    頻繁に使用されないイベントは、表示されないのですかね?

     

    表示されないルールなどが、もしございましたら教えてください。

    お願い致します。

    2008年6月1日 11:42
  • Web上にあるMSDNではなく、ローカルにインストールされる、Visual Studio 2008(英語版)のドキュメントでSystem.Windows.Forms.ControlクラスのMouseWheelイベントを確認すると、MoseWheelイベントは以下のようにBrowsableAttribute(false)と定義されているみたいです。なので、デザイナ上のプロパティウィンドウのイベントに表示されないのだと思います。

     

    Code Snippet
    [BrowsableAttribute(false)]
    public event MouseEventHandler MouseWheel

     

     

    2008年6月1日 12:10
  • ありがとうございます。

     

    表示されないイベントも存在するのですね。

    プロパティウィンドウのイベントにすべて表示されるものだと、

    思い込んでおりましたので、とても勉強になりました。

     

    ありがとうございます。

     

    2008年6月1日 12:42