初めまして、まめと申します。
過去ログなど調べましたが、結果が得られないのでどうか教えてください。
リストボックスを二つ横に並べて一方を垂直スクロールするともう一方が自動的に同じ感じに垂直スクロールといった事をしたいのですが、何か方法はありませんでしょうか。
教えてください。お願いします。
ListBox2.TopIndex = ListBox1.TopIndex のようにTimerコントロール等
でTopIndexの同期を取って下さい。
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
ありがとうございます!!!
できました〜〜〜!!!!!!!
。・(>_<)・。動いてる〜〜〜!!!!
ありがとうございました!!!!
花ちゃんさん、魔界の仮面弁士さん
お早いレスありがとうございました。
5時間悩んだのが救われた…。・(>_<)・。
ありがとうございました!!!