2014-04-02 43 views
0

首先值得注意的是我对Visual Basic来说很新。我在Visual Basic语言中的Visual Studio 2012中创建了一个win窗体项目。添加带有显示文本的对象到组合框并选择它们

鉴于下面的代码,我想使用名为cmbChoose的组合框从4个选项中进行选择。这些选项将在组合框被列为:

“问题1”

“问题2”

“问题3”

“问题4”

当用户改变索引cmbChoose,我想将与该索引关联的类对象设置为父类对象以获取多态行为。这可能是:

  1. 用户选择“问题1”。
  2. 父对象problem设置为存储在索引“问题1”中的类对象。该对象将在该类的顶部创建problem1
  3. 用户执行动作,problem1是执行功能的当前子类
  4. 用户选择“问题3”。
  5. 父对象problem设置为存储在索引“问题1”中的类对象。这个对象将是在课程顶部创建的problem3

看起来很简单,我已经阅读了stackOverflow上的几篇文章,试图让语法正确,但我做错了什么。我已经确定组合框可以“使用数据绑定项目”,并且试图以不同的方式设置DataSource,DisplayMember和ValueMember。我试图以不同的方式访问存储在索引处的对象。

我不想使用条件来选择对象,它必须是所选索引处的对象。

这是代码。假设问题类和子类被正确编码(它们是)。将需要被改变/正确实现的功能是:

  1. Frm_Base_Load()*或另一种适当的函数来加载该组合框

  2. 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 
    

    末级

回答

1

好的,假设你的类是正确的这我就是你必须做的事情:

在的Form_Load:问题

Dim ProbList As New List(Of Problem) 

首先创建列表然后加入所有的问题到该列表。

ProbList.Add(ProblemX) 

然后创建一个绑定源并添加列表作为数据源

Dim BSProblems As New BindingSource 
BSProblems.DataSource = ProbList 

然后加入BindingSource的组合框。

ComboBox.DataSource = BSProblems 

然后添加你想要的任何显示成员(我选择了名称,你可能有不同的东西)。

ComboBox.DisplayMember = "Name" 

然后,在你的Problem类中,你必须有一个名为Name的属性。您创建一个属性是这样的:

Property Name As String 

注意怎么不说“公共名称......”因为不工作(这是这里的常见错误)。

最后,你必须从获取的SelectedIndexChanged问题的基类:

problem = CType(ComboBox.SelectedItem, Problem) 

希望这有助于你出去。请注意,我帮助你的唯一原因是我自己很难理解这一点。不要指望将来会有这样的帮助,因为在发布这个问题之前,你看起来并没有尝试过很多东西。

+0

这样做,谢谢一堆。我读了几个地方,你可以做到这一点,而不创建一个列表,但没有提示。无论如何,对我来说问题不是我没有尝试过很多东西。问题在于,在搜索时没有一个确切的方法来学习这个我能找到的。这意味着从一个更有经验的VB家伙那里获得一个半详细的答案对于其他尝试同样事情的人来说会容易得多。 – user2079828

相关问题