フォームを開くのに次の構文では開けません!どうやったら変数に代入したフォーム名で開くことができるのでしょう?誰か教えてください!
Dim FrmName As String
FrmName="FrmTest"
FrmName.Show
※ "FrmTest.Show" のように直接フォーム名を書けば開けますが、変数だと開けません。なぜなのかわかりません。教えてください、お願いします。
※環境不明ですので、とりあえずVB6として書いてみます
Dim instanceFrmTest As FrmTest
set instanceFrmTest=Forms.Add("FrmTest")
with instanceFrmTest
.visible=true
end with
> なぜなのかわかりません。
それは文字列を相手にしているから。
プログラムコードは文字列の塊じゃないですよ。
(逆にプログラム中に「文字列」というString型の実体を起きたい場合は、リテラルとして書きます)
教えていただいたコードで確かにフォームは開けました。ありがとうございます。
質問の仕方が悪かったのですが、僕が知りたかったのは、次のようなことなのです。
<メニュー画面のラベルコントロールにフォーム名を表示させ、ラベルがクリックされたら該当するフォームを開く。>
間違っているのを承知でやりたいことを、コードにすると次のようになります。
Private Sub lblMenuNo_Click(Index As Integer)
lblMenuNo(index).Caption.Show
End Sub
もちろん、これではフォームは開きません。教えていただけますか?
もう少し「型」を意識してください。
また「メソッド」も意識してください。
以上を踏まえて:
> lblMenuNo(index).Caption.Show
lblMenuNo
→(多分)Labelのコントロール配列を示す
[コントロール配列](index)
→コントロール配列のインデックス指定している。
コントロールを示す(この場合はLabel)
[Label].Caption
→Labelに「Caption」というメッセージを送っている
Stringを示す
[String].Show
→Stringに「Show」というメッセージを送っている
ありえない(Stringはそもそもオブジェクトではないのでメッセージを受け取ることは無い)ので例外が発生する
こんな感じで分解できます。
実際に次のように確かめられましょう。
private sub form_load()
dim index as integer
index=lblMenuNo.LBound()
msgbox typename(lblMenuNo)
msgbox typename(lblMenuNo(index))
msgbox typename(lblMenuNo(index).Caption)
end sub
以上//
素直にIndexでSelect Caseして分岐処理した方がいいのでは
ツイート | ![]() |