タイトル | : Re: AxMshFlexGridでホイールが効かない |
記事No | : 7040 |
投稿日 | : 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
|