複数のリストボックスをフォームの中にドラッグアンドドロップすることができます。コードのドラッグ&ドロップの部分はうまくいくようです。リストボックスに項目をドロップすると、私はリストボックスのサイズ変更手続きを行って、その内容に合わせてリストボックスのサイズを変更します。私が取り組んでいる問題は、アイテムをLB1(例えば)からLB2にドラッグすると、LB1はあたかもそのアイテムのリストに余分なアイテムがあるかのようにサイズ変更されるということです。私はそれを防止したいと思いますが、どうしたらよいか分かりません。ここでサイズ変更コードは次のとおりです。ドラッグアンドドロップでListBoxのサイズを変更する
Private Sub ListBox_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListBox1.MouseDown, ListBox2.MouseDown
Dim Lbx As ListBox = sender
Dim Pt As New Point(e.X, e.Y) ' Returns coords of mouse
Dim Idx As Integer
Dim retval As DragDropEffects
' Determine which listbox item was dragged
Idx = Lbx.IndexFromPoint(Pt)
' Start a Drag and drop with that item
If Idx >= 0 Then
'
retval = Lbx.DoDragDrop(Lbx.Items(Idx), DragDropEffects.All)
Debug.WriteLine(retval)
If retval And DragDropEffects.Move Then
Lbx.Items.RemoveAt(Idx)
End If
End If
End Sub
Private Sub ListBox_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListBox1.DragEnter, ListBox2.DragEnter
If (e.Data.GetDataPresent(DataFormats.Text)) Then
e.Effect = DragDropEffects.Move Or DragDropEffects.Copy
End If
End Sub
Private Sub ListBox_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListBox1.DragDrop, ListBox2.DragDrop
Dim LB As ListBox = sender
LB.Items.Add(e.Data.GetData("Text"))
QueueResize()
End Sub
そして、ここでは、サイズ変更のためのコードは次のとおりです。
Private Sub QueueResize()
For Each cont As System.Windows.Forms.Control In Panel1.Controls
If cont.GetType.ToString = "System.Windows.Forms.ListBox" Then
Dim LB As ListBox = cont
On Error GoTo ErrHandler
Dim lItemHeight As Long
Dim lRet As Long
Dim lItems As Long
Dim sngTwips As Single
Dim sngLBHeight As Single
If LB.Items.Count = 0 Then
LB.Height = 25
'Return True
Else
lItems = LB.Items.Count
lItemHeight = LB.ItemHeight
If lItemHeight > 0 Then
LB.Height = lItemHeight * lItems + 5
'AutoSizeLBHeight = True
End If
End If
End If
Next
ErrHandler:
End Sub
任意の助けをいただければ幸いです!前もって感謝します。
: は、次のコードを追加します。 Lbx.Items.RemoveAt(Idx)の後の最初のリストボックスのサイズを変更します。 –