VB6からVB.netへソースを自動変換したのですが、
変換した物のtextBoxプロパティにはその他にIndexがあり、
プログラム内でも配列のように使用出来るようなのですが、
新たに追加したtextBoxにはIndexがありません。
どのようにしたらプロパティにIndexが追加されるのでしょうか?
わたしの環境は.netです。
よろしくお願いします。
[VB.NET]で開いた時に走る機能を使ったのであれば、
自動変換後のコードにコメントが書かれてなかったですか?
そこから詳しい説明のヘルプ(MSDN)に飛べるように
なっていると思うんですが、読んでいたらこんな質問には
ならない筈です。ちゃんと答えが書いてあるのに読まずに
質問されても、無駄な説明をする事になります。
本当に分からない部分のみを質問して下さい。
できれば自分の理解している範囲の事も説明して下さい。
足りない部分があれば回答します。
回答ありがとうございます。
質問の仕方が悪かったようですいませんでした。
ただ、調べていないというのはちょっと・・・
もちろんMSDN等では調べました。
エラーで落ち場所等はそこのコメントからMSDNで調べましたが、
フォームのテキストBOXのプロパティにIndexが追加されているのは
どこにコメントが入るのでしょうか?
さすがにフォーム上は無理だと思いますが。
その他のソース上も探してみたのですが、
それらしい箇所がみつからなっかので
質問させて頂きました
コントロール配列についても調べはしました。
サポートされていない。
TagIndexがある等書かれているのですが、Indexの件は載っておりませんでした。
例えば 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
特攻隊長まるるうさん回答及び、代替案ありがとうございます。
結果的には特攻隊長まるるうさんの言うように、自動変換コードを参考に
[.net]にあわせて最初から作り直すことにしました。
本件に関しては、
> [DOBON.NET コントロールの配列を作成する]
を参考に対応してみます。
結果は対応後、報告します。
特攻隊長まるるうさん ありがとうございました。
.NETの壁は高いですね。
最初から作り直していたら、なかなかコントロールの配列まで
たどり着けませんでした・・・
[DOBON.NET コントロールの配列を作成する]
を参考に期待する動作が出来るようになりました。