変数に代入したフォーム名でフォームを開くには?


ほりほり  2006-08-28 07:30:51  No: 132930

フォームを開くのに次の構文では開けません!どうやったら変数に代入したフォーム名で開くことができるのでしょう?誰か教えてください!

Dim FrmName As String
FrmName="FrmTest"
FrmName.Show

※ "FrmTest.Show" のように直接フォーム名を書けば開けますが、変数だと開けません。なぜなのかわかりません。教えてください、お願いします。


ガッ  2006-08-28 07:57:24  No: 132931

※環境不明ですので、とりあえずVB6として書いてみます
Dim instanceFrmTest As FrmTest
set instanceFrmTest=Forms.Add("FrmTest")
with instanceFrmTest
    .visible=true
end with

> なぜなのかわかりません。
それは文字列を相手にしているから。
プログラムコードは文字列の塊じゃないですよ。
(逆にプログラム中に「文字列」というString型の実体を起きたい場合は、リテラルとして書きます)


ほりほり  2006-08-28 09:22:57  No: 132932

教えていただいたコードで確かにフォームは開けました。ありがとうございます。
質問の仕方が悪かったのですが、僕が知りたかったのは、次のようなことなのです。

<メニュー画面のラベルコントロールにフォーム名を表示させ、ラベルがクリックされたら該当するフォームを開く。>

間違っているのを承知でやりたいことを、コードにすると次のようになります。

Private Sub lblMenuNo_Click(Index As Integer)

lblMenuNo(index).Caption.Show

End Sub

もちろん、これではフォームは開きません。教えていただけますか?


ガッ  2006-08-28 09:59:43  No: 132933

もう少し「型」を意識してください。
また「メソッド」も意識してください。

以上を踏まえて:
> 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

以上//


通ってみた  2006-08-29 05:43:54  No: 132934

素直にIndexでSelect Caseして分岐処理した方がいいのでは


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加