tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re: AxMshFlexGridでホイールが効かない
投稿日: 2008/02/18(Mon) 21:52
投稿者魔界の仮面弁士
> VB2005で、AxMshFlexGridを使用しているのですが
> マウスホイールでスクロールさせようとしても
> どうやってもスクロールしません。
その対象となるコントロール自体が、
 「ホイールが操作された時に、スクロール(など)を行う」
ように作られていない限り、スクロールする事はありません。
そして MSHFlexGrid は、ホイール機能を実装していません。

その一方で幾つかのマウスドライバやユーティリティは、ホイール操作を
PageUp/PageDown や、スクロールバー操作の処理などに変換してから
コントロールに渡すことで、擬似的にスクロール対応させている物もあります。
(どこでもホイールや、初期の Microsoft IntelliPoint など)


> 過去ログ等を拝見する限りでは、スクロールしないほうが
> おかしいようなのですが、どこを確認していいかわかりません。
スクロールしない方が正常です。(どこでもホイールなどの)ソフトで、
ホイール操作をスクロールメッセージに変換しないと無理ですね。


> インターネットエクスプローラー等、ほかのアプリでは
> 問題なくスクロールしております。
IE や Office は、スクロール操作に対応しているアプリケーションです。
(それらとて、初期のバージョンではスクロールに対応していませんでした)


> MouseWheelに何か記述が必要なのかと思ったのですが
> そもそもAxMshFlexGridには MouseWheelイベントがないようで…。
たとえば、このようにして実装できます。

Partial Public Class Form1
    Public Class SampleGrid
        Inherits AxMSHierarchicalFlexGridLib.AxMSHFlexGrid
        Public Shadows Event MouseWheel As MouseEventHandler
        Protected Overrides Sub OnMouseWheel(ByVal e As MouseEventArgs)
            RaiseEvent MouseWheel(Me, e)
            MyBase.OnMouseWheel(e)
        End Sub
    End Class

    Private WithEvents AxMSHFlexGrid1 As SampleGrid
    Private Sub Form1_Load(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles MyBase.Load
        AxMSHFlexGrid1 = New SampleGrid()
        AxMSHFlexGrid1.Dock = DockStyle.Fill
        Controls.Add(AxMSHFlexGrid1)

        FillSampleData(AxMSHFlexGrid1)
    End Sub

    Private Sub AxMSHFlexGrid1_MouseWheel(ByVal sender As Object, _
      ByVal e As MouseEventArgs) Handles AxMSHFlexGrid1.MouseWheel
        Dim row As Integer = AxMSHFlexGrid1.TopRow - _
            (e.Delta \ SystemInformation.MouseWheelScrollDelta)
        If row < AxMSHFlexGrid1.FixedRows Then
            row = AxMSHFlexGrid1.FixedRows
        ElseIf row > AxMSHFlexGrid1.Rows - 1 Then
            row = AxMSHFlexGrid1.Rows - 1
        End If
        AxMSHFlexGrid1.TopRow = row
    End Sub

    Private Shared Sub FillSampleData( _
      ByVal grid As AxMSHierarchicalFlexGridLib.AxMSHFlexGrid)
        With grid
            .Rows = 200
            '.Cols = 20
            .set_Cols(20)
            Dim Cells As New System.Text.StringBuilder()
            For row As Integer = 0 To 199
                For col As Integer = 0 To 19
                    Cells.Append(String.Format("{0,3}-{1,3}", row, col))
                    Cells.Append(vbTab)
                Next
                Cells.AppendLine()
            Next
            .Row = 0
            .Col = 0
            .RowSel = 199
            .ColSel = 19
            .Clip = Cells.ToString()
            .RowSel = 0
            .ColSel = 0
        End With
    End Sub
End Class

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。