.net変換時のコントロール配列を継承するには?


マコ  2005-04-06 20:06:53  No: 120725  IP: [192.*.*.*]

VB6からVB.netへソースを自動変換したのですが、
変換した物のtextBoxプロパティにはその他にIndexがあり、
プログラム内でも配列のように使用出来るようなのですが、
新たに追加したtextBoxにはIndexがありません。
どのようにしたらプロパティにIndexが追加されるのでしょうか?

わたしの環境は.netです。
よろしくお願いします。

編集 削除
特攻隊長まるるう  2005-04-07 00:44:03  No: 120726  IP: [192.*.*.*]

[VB.NET]で開いた時に走る機能を使ったのであれば、
自動変換後のコードにコメントが書かれてなかったですか?
そこから詳しい説明のヘルプ(MSDN)に飛べるように
なっていると思うんですが、読んでいたらこんな質問には
ならない筈です。ちゃんと答えが書いてあるのに読まずに
質問されても、無駄な説明をする事になります。
本当に分からない部分のみを質問して下さい。
できれば自分の理解している範囲の事も説明して下さい。
足りない部分があれば回答します。

編集 削除
マコ  2005-04-07 09:04:40  No: 120727  IP: [192.*.*.*]

回答ありがとうございます。
質問の仕方が悪かったようですいませんでした。

ただ、調べていないというのはちょっと・・・
もちろんMSDN等では調べました。
エラーで落ち場所等はそこのコメントからMSDNで調べましたが、
フォームのテキストBOXのプロパティにIndexが追加されているのは
どこにコメントが入るのでしょうか?
さすがにフォーム上は無理だと思いますが。
その他のソース上も探してみたのですが、
それらしい箇所がみつからなっかので
質問させて頂きました

コントロール配列についても調べはしました。
サポートされていない。
TagIndexがある等書かれているのですが、Indexの件は載っておりませんでした。

編集 削除
特攻隊長まるるう  2005-04-07 10:30:10  No: 120728  IP: [192.*.*.*]

例えば Command1 をコントロール配列にした以下のソースコードを変換すると
[VB6.0]
    Private Sub Command1_Click(Index As Integer)
        Debug.Print Index
    End Sub
[VB.NET]
  Private Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command1.Click
    Dim Index As Short = Command1.GetIndex(eventSender)
    System.Diagnostics.Debug.WriteLine(Index)
  End Sub
となります。Command1 のデータ型を確認します。
  Public WithEvents Command1 As Microsoft.VisualBasic.Compatibility.VB6.ButtonArray
デザイン画面で各ボタンのデータ型を確認します。
  Public WithEvents _Command1_0 As System.Windows.Forms.Button
  Public WithEvents _Command1_1 As System.Windows.Forms.Button
  Public WithEvents _Command1_2 As System.Windows.Forms.Button
  ……
新規で[VB.NET]版テキストボックスを貼り付けデータ型を確認します。
        Friend WithEvents Button1      As System.Windows.Forms.Button

以上を踏まえて大まかに説明します。変換後の Command1 はボタンではありません。
ボタンを複数格納した、変換時に独自に作られたクラスです。
ソリューションエクスプローラの参照設定に
    Microsoft.VisualBasic.Compatibility
という参照設定がなされています。その中で定義されています。この参照を
設定しないと使えません。実体は.NetFramework で用意されたDLLです。
で、新規で貼り付けたボタンを同じように使うには
"Windows フォーム デザイナによって生成されたコード"
などで設定されている初期設定を自分で設定する必要があり、難易度が
結構高いです。

ここまでで質問に対する直接的な回答は止めておきます。ここから代替案です。

まず、自動変換したコードがそのまま使えなかった事を理解しておられるようです
ので、大前提を言っておきます。自動変換したコードは参考にするだけで、
[VB.NET]の流儀にあわせて再度、最初からプログラムし直した方が良いという事です。

上のようなサポート外のコードについて[VB6.0]の動作で対応させるには、
[VB6.0]のDLLを参照して常にワンクッション置いた回りくどいコードを
書く必要があり、かなりの知識を要求されます。結果的に
『こんなことなら最初から作り直した方が早かった』
という結論に99%なります。

>どのようにしたらプロパティにIndexが追加されるのでしょうか?
これのみを実現させるなら『継承』という概念があります。難易度は中級。
ヘルプにも載ってますが、サンプルも過去載せました。過去ログ検索『継承』でどうぞ。

>.net変換時のコントロール配列を継承するには?
[VB.NET]で、[VB6.0]時代のコントロール配列のような動作を実現するには
いくつかの方法があります。
とりあえず過去ログ検索『コントロール配列』でどうぞ。
↓あわせてご参考下さい。
[Visual Basic .NET におけるコントロール配列の変更点]
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vbcon/html/vbconcontrolarraychangesinvisualbasicnet.asp
[DOBON.NET コントロールの配列を作成する]
http://dobon.net/vb/dotnet/control/buttonarray.html

編集 削除
マコ  2005-04-07 11:46:19  No: 120729  IP: [192.*.*.*]

特攻隊長まるるうさん回答及び、代替案ありがとうございます。

結果的には特攻隊長まるるうさんの言うように、自動変換コードを参考に
[.net]にあわせて最初から作り直すことにしました。

本件に関しては、
> [DOBON.NET コントロールの配列を作成する]
を参考に対応してみます。
結果は対応後、報告します。

編集 削除
マコ  2005-04-08 00:06:45  No: 120730  IP: [192.*.*.*]

特攻隊長まるるうさん  ありがとうございました。

.NETの壁は高いですね。
最初から作り直していたら、なかなかコントロールの配列まで
たどり着けませんでした・・・

[DOBON.NET コントロールの配列を作成する]
を参考に期待する動作が出来るようになりました。

編集 削除