Google
 
Web itpro-blogger.blogspot.com
土曜日, 12月 13, 2008

[VB2005]2つのDataGridのスクロールを連動させる

▼質問
2つのDataGridのスクロールを連動させるにはどうしたら良いんだ。

DataGridのScrollイベントでスクロールのValue値を設定したんだがうまくいかないんだ。



Private Sub DataGrid2_Scroll(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGrid2.Scroll
Dim obj As DataGrid = CType(sender, DataGrid)
CType(Me.DataGrid1.Controls.Item(0), HScrollBar).Value = CType(obj.Controls.Item(0), HScrollBar).Value
End Sub



スクロールだけ動いて、グリッドの内部が動かないんだ。

Refresh等のイベントを呼んでも駄目だったんだ。

どうしたらよいか教えてくれ!

▼回答
DataGridを継承した独自のクラスを作成するしか方法はないようだ。

独自クラスでスクロールを行うパブリックメソッドを作成して

引数にValue値を与えてそのメソッドの中でGridHScrolled

メソッドをコールすればいいんだ。



Public Class CustomDataGrid
Inherits DataGrid

'''
''' 水平スクロールバーのスクロールイベントを呼び出しNewValueを設定します。
'''

''' スクロールバーの新しい値
Public Sub GridHScroll(ByVal newValue As Integer)
Dim args As New ScrollEventArgs(ScrollEventType.LargeIncrement, newValue)
GridHScrolled(Me, args)
End Sub

End Class


■参考サイト
DataGrid内の指定された行までスクロールする: .NET Tips: C#, VB.NET, Visual Studio
http://dobon.net/vb/dotnet/datagrid/gridvscrolled.html

▼質問
片方に垂直スクロールがあると少しずれるんだ。

どうしたらよいか教えてくれ!

▼回答
垂直スクロールを表示させてから、それを非表示にすればいいんだ。

Visibleは設定ができないようだから、次の例のようにWidthを0に設定すればいいんだが・・・。

CType(Me.DataGrid1.Controls.Item(1), VScrollBar).Width = 0

これだけでは駄目なんだ。

もうひとつ、連動する相手側のサイズをあらかじめスクロールの幅分だけ短くしてないとうまく

いかないから気をつけてくれ!






Comments: コメントを投稿

<< Home

This page is powered by Blogger. Isn't yours?