将带有显示文本的对象添加到ComboBox并选择它们

时间:2014-04-02 09:51:33

标签: vb.net

首先值得注意的是,我是Visual Basic的新手。我在Visual Basic语言中使用Visual Basic语言创建了一个win表单项目。

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

"问题1"

"问题2"

"问题3"

"问题4"

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

  1. 用户选择"问题1"。
  2. 父对象problem设置为存储在"问题1"的索引处的类对象。该对象将是problem1,它在类的顶部创建。
  3. 用户执行操作,problem1是执行函数的当前子类
  4. 用户选择"问题3"。
  5. 父对象problem设置为存储在"问题1"的索引处的类对象。该对象将是problem3,它在类的顶部创建。
  6. 看起来很简单,我已经阅读了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 个答案:

答案 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)

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