玄関へお回り下さい。
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






2004/07/21
2005/10/18