2014-04-02 40 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

相關問題