質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

2659閲覧

VB6からVB.NET移行:フォームのコントロール配列

TEC_S

総合スコア79

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2020/01/27 05:53

前提・実現したいこと

WindowsフォームアプリのVB6からVB.NETへの変換を行っています。
VB6で使われていたコントロール配列の、VB.NETに変更した時の取り扱いについて、調べましたが不明点が多いため、質問させてください。

発生している問題・エラーメッセージ

アップデートにて、フォームの呼び出し場所が問題となっています。
該当フォームをLoadで呼び出しています。
ここは、通常の呼び出し(オブジェクト化して、.ShowDialog)で問題ないようにかんがえていましたが、DispForm()にて、frmForm1(i)を参照するようになっていました。

この場合、複数同じフォームを呼び出すという事で、フォーム自体がコントロール配列になっている?と考えて調べていたのですが、なかなか情報が出てきません。よろしくお願いいたします。

getFrom.vb

1 2private Sub LoadFrm(ByRef index As Short) 3 4 With frmFrom1(index) 5 6 .No = index 7 8 'UPGRADE_ISSUE: Load ステートメント はサポートされていません。 9 Load(frmFrom1(index)) 10 .Show 11 1213 ・ 14 ・ 15 End With 16End Sub 17 18Public Sub DispForm() 19 20 For i = oldIndex To newIndex 21 Call frmFrom1(i).メソッド() ←フォームのコントロール配列!? 22 Next i 23 24End Sub 25

該当のソースコード

VB.NET

1 Call frmFrom1(i).メソッド() ←フォームのコントロール配列!?

試したこと

1)下記のように変更しようとしたが、frmFrom1(i)の部分をどう変更したらいいか分からず詰まっている状況。

VB.NET

1 Dim frmFrom1 As New From1() 2 3 frmFrom1.No = index 456

2)コントロール配列について調査・・・肝心なところがリンク切れ
https://www.nda.co.jp/memo/vdoko/2.html

補足情報(FW/ツールのバージョンなど)

OS:Windows10
開発環境:Visual Studio 2017
使用フレームワーク:.Net Framwark 4.6.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2020/01/27 06:08

そのコードは誰が書いたんですか?
TEC_S

2020/01/27 06:14

質問、ありがとうございます。 前任者が書いたコードになります!
dodox86

2020/01/27 06:21

frmFrom1? frmForm1? 転記ミスでしょうか? また、VB6の元のコードも示された方が良いと思います。(現状、どれがVB6でVB.NETなのか判別しづらいです。Call...のコードはVB6なのだと思いますが)
hihijiji

2020/01/27 07:32

VB6 と VB.NET は文法が似ているだけで全く別物です。 コンバートするには、VB6 と VB.NET の両方に精通している必要があります。 大概の場合、新しく作り直したほうがいいものが早く出来ます。
guest

回答2

0

ベストアンサー

VBNET

1Dim frmFrom1 As New From1()

これではForm1の配列の枠が作成されるだけで、実際に中身のForm1がインスタンス化されるわけではありません。

frmFrom1が実際にどういう型なのか分かりませんが、とりあえずForm1というフォームを配列にする場合です

VBNET

1Private forms(10) As Form1 2 3 4private Sub LoadFrm(ByRef index As Short) 5 forms(index) = new Form1 6 7 With forms(index) 8 .No = i 9 .Show 10 End With 11End Sub

他の部分がどうなっているのか分かりませんので、LoadFrm関数にて毎回newすべきなのか等は私ではどうにもなりません。
また、配列の要素数など提示されていない部分に関しても知りません。

投稿2020/01/27 06:32

YAmaGNZ

総合スコア10222

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TEC_S

2020/01/27 08:26

情報不足の中、ありがとうございます。 配列で宣言をしておいて、一つずつ初期化していくという事ですね。 頂いた内容で問題ないと考えますので、ベストアンサーにさせて頂きました。 お伝えする情報、もう少し明確に分かりやすく書きたいと思います。 ありがとうございました!!
guest

0

コントロールの配列の認識であっているようですよ。
参考URL
http://rucio.a.la9.jp/main/shokyu/jugyou20.htm

With句内の処理内容が間違っていると思います。

素直にもともとの処理では呼び出せないでしょうか。
frmFrom1(index).メソッド()

frmFrom1を引数にして呼び出している状態になっていますが、もともとformFrom1は引数ではないと思います。

投稿2020/01/27 06:17

kgreenjp

総合スコア97

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TEC_S

2020/01/27 08:26

仰る通り、もともとの処理で呼び出せるよう、宣言の方を変えました。 ご指摘ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問