0

Datatable と String を引数として取る Sub を実行しています。

Private Sub Populate(ByVal dttemp As DataTable, ByVal strWhichPart As String)

ある時点で、データテーブル内のデータの一部が取り込まれたコンボボックスがあります。コンボボックスの名前は、cmd に文字列の名前を加えたものです。たとえば、文字列が Person_FirstName の場合、コンボボックスの名前は cmbPerson_FirstName になります。次に、次のようにコンボボックスにアイテムを追加します。

 cmbPerson_FirstName.Items.Add(strHold(rr))

私の質問は、文字列をコマンドにすることはできますか? サブの文字列引数と同じ名前のコンボボックスがたくさんあるので、どうすればこのようなことを行うことができますか

strWhichPart.Items.Add(strHold(rr))

strWhichPart は文字列です。文字列をコマンドとして実行できるコマンドはありますか? ありがとうございました。

4

3 に答える 3

1

ho1 を少し変更すると、うまくいきました。どうもありがとう

 CType(Controls("cmb" + strWhichPart), ComboBox).Items.Add(strHold(rr))
于 2010-09-15T10:09:34.357 に答える
1

Controls私が正しく理解している場合は、文字列をキーとして使用して、フォームのコレクションから正しいコントロールを取得してください。

CType(Controls(strWhichPart), ComboBox).Items.Add(strHold(rr))
于 2010-09-15T09:33:46.367 に答える
1

メソッド内のコードでアセンブリを作成することにより、リフレクションを使用してこれを実現できますが、実際にはお勧めしません。のように、それは非常識です。このアプローチを必要とする .NET 開発の問題はないと思います。

このアプローチを使用するのではなく、実際に関連するコンボ ボックスを任意の文字列ではなく引数として渡します。コンボ ボックスは、他のオブジェクトと同様にオブジェクトです。文字列でコンボボックスを検索できる辞書を作成できます。何かのようなもの:

Dictionary(Of String, ComboBox) MyDictionary = new Dictionary(Of String, ComboBox)()
MyDictionary.Add("ComboBoxA", objComboBoxA)
ComboBox objTheComboBox = MyDictionary("ComboBoxA")

オブジェクトに付ける名前は、コード内で意味的に関連するものであってはなりません。オブジェクトに「lstMyObjectNamedThisWayForAReason1」という名前を付けた場合、それを使用して参照するべきではありません。代わりに、GUI 要素を構成するものとそれを参照する方法を分離する必要があります。

たとえば、WinForms GUI を作成してすべての項目を直接参照すると、後で別のフレームワークを使用して別のフロントエンドを作成する必要があり、すべての参照を書き直す必要があります。ロジックをコントロールに直接結び付けなければ、これは問題になりません。

それらを結び付ける唯一の理由は、怠惰と、将来コードを改善する必要があるかもしれない同僚への敬意の欠如です。GUIがどのように見えるかを気にする必要があるのはなぜですか? Visual Studio を使用していない可能性もあります。彼らは確かにあなたのコードを他の場所で使用することはできません。

于 2010-09-15T09:35:16.673 に答える