VB.netでリストの垂直スクロールを設定するには?

解決


まめ  2004-07-19 23:18:54  No: 114908  IP: [192.*.*.*]

初めまして、まめと申します。
過去ログなど調べましたが、結果が得られないのでどうか教えてください。

リストボックスを二つ横に並べて一方を垂直スクロールするともう一方が自動的に同じ感じに垂直スクロールといった事をしたいのですが、何か方法はありませんでしょうか。

教えてください。お願いします。

編集 削除
花ちゃん  2004-07-20 01:16:41  No: 114909  IP: [192.*.*.*]

ListBox2.TopIndex = ListBox1.TopIndex のようにTimerコントロール等
でTopIndexの同期を取って下さい。

編集 削除
魔界の仮面弁士  2004-07-20 01:45:57  No: 114910  IP: [192.*.*.*]

VB6 なら、
  Private Sub List1_Scroll()
    List2.TopIndex = List1.TopIndex
  End Sub
だけで済むのですが…VB.NETにはScorllに相当するイベントが
用意されていないので、WM_VSCROLLをとらえる必要があると思います。
ちょっと面倒ですね。(^^;)

Private Class MyListBox
    Inherits ListBox
    Public Event Scroll()
    Protected Overrides Sub WndProc(ByRef m As Message)
        Const WM_VSCROLL As Integer = &H115I
        If m.Msg = WM_VSCROLL Then
            RaiseEvent Scroll()
        End If
        MyBase.WndProc(m)
    End Sub
    Protected Overrides Sub OnMouseWheel(ByVal e As MouseEventArgs)
        If e.Delta <> 0 Then
            RaiseEvent Scroll()
        End If
    End Sub
    Protected Overrides Sub OnSelectedIndexChanged(ByVal e As EventArgs)
        RaiseEvent Scroll()
    End Sub
End Class

Private WithEvents MyListBox1, MyListBox2 As New MyListBox()
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
    SuspendLayout()

    'カスタムListBoxの作成
    MyListBox1.Name = "MyListBox1"
    MyListBox2.Name = "MyListBox2"
    MyListBox1.Size = New Size(200, 300)
    MyListBox2.Size = New Size(200, 300)
    MyListBox1.Location = New Point(40, 40)
    MyListBox2.Location = New Point(250, 40)

    'ダミーデータの作成
    Dim R As New Random()
    Dim I As Integer
    For I = 1 To 100
        MyListBox1.Items.Add(New String("*"c, R.Next(1, 20)))
        MyListBox2.Items.Add(New String("@"c, R.Next(1, 20)))
    Next

    Me.Controls.Add(MyListBox1)
    Me.Controls.Add(MyListBox2)

    ResumeLayout()
End Sub

'スクロールの同期
Private Sub MyListBox1_Scroll() Handles MyListBox1.Scroll
    MyListBox2.TopIndex = MyListBox1.TopIndex
End Sub
Private Sub MyListBox2_Scroll() Handles MyListBox2.Scroll
    MyListBox1.TopIndex = MyListBox2.TopIndex
End Sub

編集 削除
まめ  2004-07-20 01:50:53  No: 114911  IP: [192.*.*.*]

ありがとうございます!!!
できました〜〜〜!!!!!!!
。・(>_<)・。動いてる〜〜〜!!!!

ありがとうございました!!!!

編集 削除
まめ  2004-07-20 01:52:22  No: 114912  IP: [192.*.*.*]

花ちゃんさん、魔界の仮面弁士さん
お早いレスありがとうございました。
5時間悩んだのが救われた…。・(>_<)・。

ありがとうございました!!!

編集 削除