首先值得注意的是我對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