ここから本文です

VB6からVB.NETへのコンバートについての質問です。

nat********さん

2019/8/117:30:12

VB6からVB.NETへのコンバートについての質問です。

フォーム上にcmdSel(0)~cmdSel(9)という10個のボタンがあり、
どれか一つを押したときに、フォームの参照と押したボタンのインデックスを渡して色を変える関数があります。

下記のコードをVB.NETへコンバートした際に「エラー BC30456 'cmdSel' は 'Form' のメンバーではありません。」というエラーが発生してビルドできません。

VB.NETでは渡されるフォームに指定した名前のコントロールが存在するという前提の書き方はできないということでしょうか。

VB6のコード
==================================
Public Function SelTask(Fm As Form, lngIndex As Long) As Boolean
On Error Resume Next

Dim objBtn As Object
'ボタンの背景色を全て灰色に変更
For Each objBtn In Fm.cmdSel
objBtn.BackColor = vbButtonFace
Next objBtn
'押下したボタンの背景色を緑色に変更
Fm.cmdSel(lngIndex).BackColor = vbGreen

SelTask = True
Exit Function

End Function

閲覧数:
30
回答数:
2
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

hyp********さん

2019/8/120:17:26

FmにcmdSel(0)~(9)が子コントロールとして追加されていないからです。
Fm.Controls.AddRange(Fm.cmdSel)が必要です。
または、1つづつ追加するには、Fm.Controls.Add(Fm.cmdSel(0))などです。
また、このままではクリックなどされてもイベントは発生しません。

AddHandler Fm.cmdCel(0).Click, AddressOf Fm.cmdCel_Click



Private Sub cmdCel(0)_Click(ByVal sender As Object, ByVal e As EventArgs)

End Sub
が必要です。

また、今のままではボタンがフォームに追加されてもロケーション(座標)やサイズの指定がないのでフォームの左上に重なって表示されるでしょう。

Fm.cmdCel(0).Location = New Point(150, 150)
Fm.cmdCel(0).Size = New Size(100, 50)
などの指定が必要です。

質問した人からのコメント

2019/8/2 17:26:33

回答ありがとうございます。
コントロールを生成するコードが無いとだめなんですね。
上記のコードを調整しながら書き換えてみます。

ベストアンサー以外の回答

1〜1件/1件中

sap********さん

2019/8/201:50:46

コンバートはどこまでできているのでしょうか?
フォームにボタンの配列が配置できているのでしょうか?
※VB.NETでは、デザインでコントロール配列は使用できません。
※フォームLoad時にコードで作成すれば可能ですが・・・

また、標準モジュールからフォームのボタンを参照する場合も、フォームのボタンがPublicになっていないと参照できません。

コントロールの配列を作成する
https://dobon.net/vb/dotnet/control/buttonarray.html

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる