首先值得注意的是,我是Visual Basic的新手。我在Visual Basic语言中使用Visual Basic语言创建了一个win表单项目。
鉴于以下代码,我想使用名为cmbChoose
的组合框从4个选项中进行选择。这些选项将在组合框中列为:
"问题1"
"问题2"
"问题3"
"问题4"
当用户更改cmbChoose
的索引时,我希望将与该索引关联的类对象设置为父类对象以获取多态行为。这可能是:
problem
设置为存储在"问题1"的索引处的类对象。该对象将是problem1
,它在类的顶部创建。problem1
是执行函数的当前子类problem
设置为存储在"问题1"的索引处的类对象。该对象将是problem3
,它在类的顶部创建。看起来很简单,我已经阅读了stackOverflow上的几个帖子,试图让语法正确,但我做错了。我已经确定组合框可以"使用数据绑定项",并且我尝试以不同的方式设置DataSource,DisplayMember和ValueMember。我试图以不同的方式访问存储在索引中的对象。
我不想使用条件来选择对象,它必须是所选索引处的对象。
这是代码。假设问题类和子类被正确编码(它们是)。需要正确更改/实施的功能是:
Frm_Base_Load()*或加载组合框的其他合适功能
cmbChoose_SelectedIndexChanged()
Public Class Frm_Base
Private problem As Problem
Private problem1 As Problem1 = New Problem1()
Private problem2 As Problem2 = New Problem2()
Private problem3 As Problem3 = New Problem2()
Private problem4 As Problem4 = New Problem2()
Private Sub btnQuit_Click(sender As Object, e As EventArgs) Handles btnQuit.Click
End
End Sub
Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click
lstTable.Items.Clear()
End Sub
Private Sub btnDoWhile_Click(sender As Object, e As EventArgs) Handles btnDoWhile.Click
problem.DoWhile()
End Sub
Public Sub btnDoUntil_Click(sender As Object, e As EventArgs) Handles btnDoUntil.Click
problem.DoUntil()
End Sub
Public Sub btnForNext_Click(sender As Object, e As EventArgs) Handles btnForNext.Click
problem.Fornext()
End Sub
Private Sub Frm_Base_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'Need to implement
'cmbChoose.DataSource = problem1
'cmbChoose.DisplayMember = "Problem 1"
'cmbChoose.ValueMember = 0
End Sub
Private Sub cmbChoose_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbChoose.SelectedIndexChanged
'Need to change to set parent object 'problem' to sub object at current index
problem = cmbChoose.DataSource
End Sub
结束班
答案 0 :(得分:1)
好吧,假设您的课程正确,这就是您必须要做的事情:
在Form_Load中:
首先创建问题列表
Dim ProbList As New List(Of Problem)
然后将所有问题添加到该列表中。
ProbList.Add(ProblemX)
然后创建一个绑定源并将列表添加为datasource
Dim BSProblems As New BindingSource
BSProblems.DataSource = ProbList
然后将Bindingsource添加到组合框中。
ComboBox.DataSource = BSProblems
然后添加你想要的任何显示成员(我选择了Name,你可能有不同的东西)。
ComboBox.DisplayMember = "Name"
然后,在你的问题类中,你必须有一个名为Name的属性。您可以创建如下属性:
Property Name As String
注意它不会说“公共名称......”,因为它不起作用(这是一个常见的错误)。
最后,你必须从SelectedIndexChanged中获取Problem基类:
problem = CType(ComboBox.SelectedItem, Problem)
希望这会帮助你。请注意,我帮助你的唯一原因是因为我自己很难理解这一点。不要期待将来有这样的帮助,因为在发布这个问题之前看起来你没有尝试过那么多东西。