VBレスキュー(花ちゃん)
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ各掲示板

メニューへ戻ります。 ListBox コントロール関係のメニュー
1.ListBox コントロールに関するワンポイントテクニック集
2.ListBox 内の項目の高さ(行の高さ)を設定する
3.リストボックス内のすべての項目を完全一致・前方一致検索
4.ListBox に複数の項目を指定位置に揃えて表示/表示データを個別に取得
5.リストボックスの指定位置に複数のタブストップ位置を設定
6.ListBox 内の項目の色を個別に設定する(オーナードローによる)
7.ListBox の背景色を1行飛びに設定する(オーナードローによる)
8.テキストファイルを読み込んでリストボックスに表示及びファイルに保存
9.2つのリストボックスのスクロールの同期を取る
10. 
11.
12.
 . 
20.その他、当サイト内に掲載の ListBox コントロールに関するサンプル


9.2つのリストボックスのスクロールの同期を取る(19_Lst_11) (旧、SampleNo.109)
1.2つのリストボックスのスクロールの同期を取る
2.
3.
4.
5.
6.

 下記プログラムコードに関する補足・注意事項 
動作確認:Windows 8.1 (Windows 7) / VB2013 (VB2010) / Framework 4.5.1 / 対象の CPU:x86
Option :[Compare Text] [Explicit On] [Infer On] [Strict On]
Imports :追加なし
参照設定:
追加なし
その他 :
    :
このサンプル等の内容を無断で転載、掲載、配布する事はお断りします。(私の修正・改訂・削除等が及ばなくなるので)
必要ならリンクをはるようにして下さい。(引用の場合は引用元のリンクを明記して下さい)
このページのトップへ移動します。 1.2つのリストボックスのスクロールの同期を取る

Public Class Form1

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'タイマーコントロールでイベントを発生/解除
    'できれば、System.Timers.Timer の方を使って下さい。
    Timer1.Interval = 50
    Timer1.Enabled = Not Timer1.Enabled
End Sub

Private oldTopIndex As Integer 'リストボックスのトップアイテムのインデックス値

'できれば、System.Timers.Timer の方を使って下さい。
Private Sub Timer1_Elapsed(sender As Object, e As 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

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    'ダミーのデータを作成及び表示
    Dim i As Integer
    ListBox1.BeginUpdate()
    ListBox2.BeginUpdate()
    '65000 件を超えるようなデータを表示する場合、XP Visuale を有効にするのチェックボックスを外しておいて下さい。
    For i = 0 To 65000 '65548 これ以上の場合 ListBox のスクロールバーが正常に動作しません。
        ListBox1.Items.Add(CStr(i).PadLeft(8) & " 番目の項目のデータ")
        ListBox2.Items.Add(CStr(i).PadLeft(8) & " 番目の項目のデータ")
    Next i
    ListBox1.EndUpdate()
    ListBox2.EndUpdate()
End Sub

End Class

注意
ListBox で 65500 件を超えるようなデータを表示する場合、[XP Visual スタイルを有効にする(X)]のチェックボックスを外しておいて下さい。
ListBox で 65500 件を超えるようなデータを表示すると垂直スクロールバーをドラッグで移動させた場合正常に動作しなくなります。
(バグなのか、仕様なのかは、さだかではありませんが、件数が多い場合 ListView 等の使用を検討してください)

今回は、簡便的にタイマーイベントで処理しておりますが、スクロールイベント組み込んだカスタムコントロールを作成して実現する方法は、下記のサイトへ[魔界の仮面弁士]さんが投稿されておられます。
 http://hpcgi1.nifty.com/MADIA/VBBBS2/wwwlng.cgi?print+200407/04070102.txt

このページのトップへ移動します。 2.


このページのトップへ移動します。 3.


このページのトップへ移動します。 4.


このページのトップへ移動します。 5. 



このページのトップへ移動します。 6.


このページのトップへ移動します。 検索キーワード及びサンプルコードの別名(機能名)
リストボックス  スクロール 同期 垂直スクロールバー 異常 スクロールバー 動作不良
2つのListBox



このページのトップへ移動します。