既存のvb6プログラムを強化しながら、移行に対するさらなる障壁の構築を回避する目的で。それらを使用せずにvb6のコントロール配列と同じ機能を実現する方法はありますか?
3 に答える
.NET には、タグ プロパティがあります。複数のコントロールによって発生したイベントを同じデリゲートで処理することもできます。新しいコントロールの Tag プロパティを Index に設定します。
Private Sub MyButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click,Button2.Click
Dim Btn As Button = CType(sender, Button)
Dim Index As Integer = CType(Btn.Tag, Integer)
' Do whatever you were doing in VB6 with the Index property
End Sub
作業の一部を自動化する VB6.Compatibility の BaseControlArray から継承するクラスも確認する必要があります。タグを使用すると、コントロール名に依存するよりも、変換プロセスでエラーが発生しにくくなります。ただし、これを絶対に感謝しないでください。コントロール名のアプローチが最適か、インデックスとしてのタグのアプローチかを決定する必要があります。
どちらの場合でも、.NET を簡単にセットアップして、複数のコントロールによって発生したイベントを 1 つのハンドラーに集めることができます。
コードで独自のコントロールの配列をいつでも作成できます :) ただし、コレクションまたはディクショナリ オブジェクトの方が適切なコンテナーである可能性があります。やりたいことによっては、カスタム コレクション クラスを使用してコントロールのラッパー クラスを作成することもできますが、オブジェクト モデルの作成は .NET でジェネリックを使用する方がはるかに優れているため、現時点では VB6 でシンプルにしておくのが最善の方法です。 .
VBA ユーザーフォームではコントロール配列がサポートされていないため、Google で VBA、ユーザーフォーム、Excel などでコントロール配列を模倣する方法を提案してください。
ところで、制御配列を VB6 から VB.NET に移行しようとしましたか? 単なる推測ですが、VB で一般的に使用されていることを考えると、非常にうまく処理されていると思います。
ここ数日、ちょっとした読書と実験を行いましたが、vb6 では、コントロール配列が行うことを実行できる方法は他にないようです。実行時に作成するコントロールの数が設計時に既にわかっている場合は、「イベントを使用して」プライベート コントロール オブジェクト変数を宣言し、これらを実行時に動的にインスタンス化できます。さらに作成する必要がある場合は作成できますが、これらにはイベントに応答して起動するコードがありません。私が見る限り、これが問題の核心です。vb6 で動的に作成されたコントロールのイベントにコードを動的に関連付ける方法はありません。