我正在创建一个简单的卡片分类应用程序。用户应该能够创建列表框并在其中添加/删除/移动项目。 我有3个类,如CardsCollection>卡>卡 我还创建了一个带有标签和列表框的用户控件。 当用户通过从另一个列表框中拖动项目来创建新的排序组时,会在CardsCollection中创建一个新的Cards对象,一个链接到它的绑定源,以及一个绑定到此绑定源的列表框的新用户控件(CardsControl): p>
Private Sub flPanel_DragDrop(sender As Object, e As DragEventArgs) Handles flPanel.DragDrop
Dim strtitle = InputBox("Create new sort group", "Enter group title", "New group")
If Not strtitle = "" Then
Dim cc As New CardsControl
cc.CardsTitle.Text = strtitle
Dim ls As ListBox = cc.lsCards
Dim cards As New cards
Dim card As card = lsCards.SelectedItem
Dim bs As New BindingSource
bs.DataSource = cards
AllCards.cards.Remove(card)
cards.cards.Add(card)
flPanel.Controls.Add(cc)
ls.DataSource = bs
ls.DataSource = cards.cards
ls.DisplayMember = "title"
End If
End Sub
由于用户控件是实时创建的,我无法将其代码添加到表单中,因此我需要管理用户控件中的所有内容。
我的控件中有以下代码:
Public Class CardsControl
Private Sub lsCards_DragDrop(sender As Object, e As DragEventArgs) Handles lsCards.DragDrop
Dim card As card = e.Data.GetData(GetType(card))
lsCards.Items.Add(card) 'this doesn't work, because the list is data bound
End Sub
Private Sub lsCards_DragOver(sender As Object, e As DragEventArgs) Handles lsCards.DragOver
If e.Data.GetDataPresent(GetType(card)) Then
e.Effect = DragDropEffects.Move
Else
e.Effect = DragDropEffects.None
End If
End Sub
End Class
我用注释标记了代码。这里出了点问题,执行停止,没有错误信息,然后我返回主屏幕。 经过一些搜索,我发现我无法将项添加到数据绑定列表框中。所以,我的问题是,如何从用户控件中到达列表框数据源后面的卡片对象?
更新: 谢谢@LarsTech! 根据您的评论,我更新了我的代码,现在我可以使用数据源对象。我不得不将第二个“cards”对象移动到BindingSource的DataMember属性。 相关的行是:
bs.DataSource = cards
bs.DataMember = "cards"
ls.DataSource = bs
ls.DisplayMember = "title"