2つのリストボックスのスクロールの同期を取る (SNo.109) | |
使用コントロール | Button1 ListBox1 ListBox2 Timer1 |
その他条件 | WindowsXP(Vista) Visual Basic 2005(VB2008) |
★ 2つのリストボックスのスクロールの同期を取る
Private oldTopIndex As Integer 'リストボックスのトップアイテムのインデックス値
Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load 'ダミーのデータを作成及び表示 Dim i As Integer For i = 0 To 100 ListBox1.Items.Add(CStr(i).PadLeft(3) & " 番目の項目のデータ") ListBox2.Items.Add(CStr(i).PadLeft(3) & " 番目の項目のデータ") Next i End Sub Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click ''タイマーコントロールでイベントを発生/解除 Timer1.Interval = 50 Timer1.Enabled = Not Timer1.Enabled End Sub Private Sub Timer1_Elapsed(ByVal sender As Object, _ ByVal e As System.Timers.ElapsedEventArgs) Handles Timer1.Elapsed 'どちらがスクロールされたかを判断しスクロールした方に合せる If oldTopIndex <> ListBox1.TopIndex Then 'ListBox1.TopIndex に合せる ListBox2.TopIndex = ListBox1.TopIndex Else ListBox1.TopIndex = ListBox2.TopIndex End If '現在の位置を保存 oldTopIndex = ListBox1.TopIndex End Sub |
|
今回は、簡便的にタイマーイベントで処理しておりますが、スクロールイベント組み込んだカスタムコントロールを作成して実現する方法は、下記のサイトへ[魔界の仮面弁士]さんが投稿されておられます。 http://hpcgi1.nifty.com/MADIA/VBBBS2/wwwlng.cgi?print+200407/04070102.txt |