2016-04-05 8 views
0

からコンボボックスに項目を追加しました。thisthis、およびthisを見ましたが、私の質問にはあまり答えていません。ComboboxはSystem.Windows.Forms.Formのメンバーではなく、

私は、今日のバージョンへの最終的なアップグレードの途中でVB.NET(2008)へのVB6プログラムのアップグレードであるプロジェクトを持っています。私は、さまざまな形でさまざまなことをするモジュールを持っています。アクティブなフォームの名前は、グローバル変数(Current_Active_Form)に格納されます。フォームからフォームに同じ名前の多くのフォームに同じコントロールがあります(たとえば、comboX)。私が今関心を持っているのは、forループを使って項目のリストをコンボボックス(comboX)にロードする関数です。これを他の多くのコンボボックスやデータグリッドビューで行う他の多くの機能があります。

例:

Public Function fillComboX(ByRef fncString As Object) As String 
    'Current_Active_Form is a global variable 
    Dim startPoint as Integer 'substring starting point 
    Dim items as Integer   'number of items in item string 
    Dim strItem as String  'string for individual item 
    dim strItems as String  'string for all items 

    ...'code that fills strItems based on fncString 
     '(don't ask me why it's an object) 
    ...'items is filled at the same time 

    startPoint = 1 
    With Current_Active_Form 
     .comboX.Items.Add("") 
     '^^ line gives error comboX is not a member of System.Windows.Forms.Form 
     For i = 1 to items 
      strItem = strItems.Substring(startPoint, 50) 
      .comboX.Items.Add(strItem) 
      '^^so does this line 
      startPoint = startPoint + 50 
     Next i 
    End With 
End Function 

Iそれがここにある方法に似てこれを行う方法はありますか?私は必要な変更を加えることができますが、これはそのまま十分なアップグレードです。ありがとう!

+1

に戻って変更することができます私のテストのためにサブストリングの長さを減少さformXは、実際のクラス名ですFormX'として、フォームの。フォームクラス – Plutonix

+0

のメソッドとしては優れているかもしれません。もう一つの方法は、CBOを渡すことです。しかし、それが 'FormX.comboX'のためだけに使用されている場合は、それがフォームのためのメソッドをいくつかのモジュールの方法ではなく、独自のコントロールを管理する方法にしてください。 – Plutonix

+0

@Plutonix正式な、フォームは' Public_Active_Form As System.Windows.Forms .Form'。これは、 'fillComboX'関数を呼び出すいくつかの形式の1つです。私は先に進み、このコードをコピーして貼り付けてもらうことができますが、可能であれば、それを集中的に保管したいと思います。 – pixelmeow

答えて

0

Current_Active_FormのControlsコレクションを参照し、コントロール名をキーとして使用して、変更するコントロールへの参照を取得する必要があります。私が意味することを説明するために、以下のコードを提供しました。コードは、フォームとして定義されているCurrent_Active_Formに依存しています。

Public Current_Active_Form As Form 

Public Function fillComboX(ByRef fncString As Object) As String 
    'Current_Active_Form is a global variable 
    Dim startPoint As Integer 'substring starting point 
    Dim items As Integer   'number of items in item string 
    Dim strItem As String  'string for individual item 
    Dim strItems As String = CStr(fncString)  'string for all items 

    'code that fills strItems based on fncString 
    '(don't ask me why it's an object) 
    'items is filled at the same time 

    startPoint = 0 
    With Current_Active_Form 
     If .Controls.ContainsKey("comboX") Then 
      '^^ line gives error comboX is not a member of System.Windows.Forms.Form 
      For i = 0 To strItems.Length - 1 
       strItem = strItems.Substring(startPoint, 4) 
       DirectCast(.Controls("comboX"), ComboBox).Items.Add(strItem) 
       '^^so does this line 
       startPoint = startPoint + 4 
      Next i 
     End If 
    End With 
End Function 

また、あなたのコードは、関数として定義されていますが、値を返すに予定がない限り、それはサブとして定義する必要がありますので、値を返しません。

私はまた、あなたが簡単に50それはCurrent_Active_Form`はむしろ `よりForm`として`定義されている `のような音

+0

ありがとう、私はこれを試してみましょう。このコードには何も返さない関数がたくさんあるので、これは私たちが変えようとしているものの1つです。 – pixelmeow

関連する問題