DOBON.NET DOBON.NETプログラミング掲示板過去ログ

複数データグリッドでのスクロールの同期について

環境/言語:[Win2000 VB.NET .NET Framework 1.1]
分類:[.NET]

こんにちは

2つ以上のDataGridを利用し、スクロールの連動を実現しようとしています。
(連結しているDataSetは同一のもの)

Scrollイベントを使用する?らしいことは分かったのですが、
DataGrid1で発生したScrollイベントをDataGrid2へ反映する方法が
分かりません。


過去記事も検索してみたのですが、ログを参照できません…

----- [Begin] ---------------------------------
■4150  スクロールの同期、または抑止
□投稿者/ nepia -(2004/05/24(Mon) 14:30:25)

データグリッドの同時スクロールを以下の発言を参考にさせて頂き作成したのですが、

http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=3992&no=0

  :
以下省略
----- [End]-------------------------------

上記URLにアクセスしても、過去ログを参照することができませんでした。
過去ログは参照できないのでしょうか?
また、データグリッドでのスクロール連動方法をご存知の方がいらっしゃいましたら
よろしくお願いします。
■No4873に返信(blessyouさんの記事)

> http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=3992&no=0
> 上記URLにアクセスしても、過去ログを参照することができませんでした。

 下記 URL でなら閲覧出来るかと思います。どうでしょうか?

DataGridの同期
http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=3992&no=0&KLOG=1
■No4877に返信(深山さんの記事)
> ■No4873に返信(blessyouさんの記事)
>
>>http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=3992&no=0
>>上記URLにアクセスしても、過去ログを参照することができませんでした。
>
>  下記 URL でなら閲覧出来るかと思います。どうでしょうか?
>
> DataGridの同期
> http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=3992&no=0&KLOG=1

こんにちは。
以前、同じ事象を本ページで教授して頂いた者です。
以下のページにスクロール同期の記事がありますので参考にして下さい。

http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=4150&rev=&no=0&KLOG=1
早々のご指南ありがとうございます。
コードを移植してテストしたところ、スクロールの同期については実現させることができました。

その後MouseWheel対応にしてみたのですが、マウスホイールでのスクロールイベントが
まるっきり無視されてしまいます。

Windows コントロール・ライブラリとして作成したDataGridの派生クラスは
以下の通りです。

-----[ #Begin ] ---------------------------------------------
'/**
'/ <summary>
'/ スクロール時に現在の先頭行をイベントで通知するグリッドコントロール
'/ </summary>
'*/
Public Class GridControlExtendedScroll
Inherits System.Windows.Forms.DataGrid

'/ <summary>
'/ DataGridの最初に表示される行を設定する
'/ </summary>
'/ <param name="rowNum">DataGridの最初に表示される行の番号</param>
Public Sub SetTopRow(ByVal rowNum As Integer)
Dim args As New ScrollEventArgs( _
ScrollEventType.LargeIncrement, rowNum)
GridVScrolled(Me, args)
End Sub

Public Event TopRowChanged(ByVal sender As Object, ByVal row As Integer)

Protected Overrides Sub GridVScrolled(ByVal sender As Object, ByVal e As System.Windows.Forms.ScrollEventArgs)
MyBase.GridVScrolled(sender, e)
RaiseEvent TopRowChanged(Me, e.NewValue)
End Sub

Protected Overrides Sub OnMouseWheel(ByVal e As System.Windows.Forms.MouseEventArgs)
MyBase.OnMouseWheel(e)
RaiseEvent TopRowChanged(Me, MyBase.VertScrollBar.Value)
End Sub

End Class
-----[ #End] ---------------------------------------------

これだとMouseWheelイベントを抑止を実現した形になってしまうのでしょうか?

どなたか、お知恵を貸して頂けないでしょうか?
よろしくお願いします。
■No4881に返信(blessyouさんの記事)
単にDataGridにフォーカスがあたっていないだけ、
なんてことはないですか?
  • 題名: Re[5]: MouseWheel対応について
  • 著者: blessyou
  • 日時: 2004/07/20 10:04:05
  • ID: 4935
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
ご指摘ありがとうございます。

スクロールするたびにフォーカスが外れていたようです。
DataGridのTopRowChangedイベント時にフォーカスを設定するようにしたら解決しました。


Private Sub GridControlExtendedScroll1_TopRowChanged1(ByVal sender As Object, ByVal row As Integer) Handles GridControlExtendedScroll1.TopRowChanged
Me.GridControlExtendedScroll2.SetTopRow(row)
Application.DoEvents() ' 描画がスムーズに行われるようにするため
'↓以下の1行を追加
Me.GridControlExtendedScroll1.Focus()
End Sub
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板