首先值得注意的是我对Visual Basic来说很新。我在Visual Basic语言中的Visual Studio 2012中创建了一个win窗体项目。添加带有显示文本的对象到组合框并选择它们
鉴于下面的代码,我想使用名为cmbChoose
的组合框从4个选项中进行选择。这些选项将在组合框被列为:
“问题1”
“问题2”
“问题3”
“问题4”
当用户改变索引cmbChoose
,我想将与该索引关联的类对象设置为父类对象以获取多态行为。这可能是:
- 用户选择“问题1”。
- 父对象
problem
设置为存储在索引“问题1”中的类对象。该对象将在该类的顶部创建problem1
。 - 用户执行动作,
problem1
是执行功能的当前子类 - 用户选择“问题3”。
- 父对象
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
末级
这样做,谢谢一堆。我读了几个地方,你可以做到这一点,而不创建一个列表,但没有提示。无论如何,对我来说问题不是我没有尝试过很多东西。问题在于,在搜索时没有一个确切的方法来学习这个我能找到的。这意味着从一个更有经验的VB家伙那里获得一个半详细的答案对于其他尝试同样事情的人来说会容易得多。 – user2079828