String型の変数を、Object型にするには?


かず  2007-08-15 19:02:39  No: 99314

初めて投稿させていただきます。

VB6で開発を行っています。
String型の変数へフォーム内のオブジェクト名あるいはフォーム名を代入して
フォームの制御又は、フォームのShowを実行させたいと思っております。

Dim sForm      As String
Dim sFrame     As String
Dim sFormObj   As Object
Dim sFrameObj  As Object

sParm = "FormMain"
sFrame = "Frame1"

Set sFormObj = sParm
Set sFrameObj = sFrame

sFrameObj.Enable = True

sForm.Show

上記記述ですと、エラーになってしまいます。
何方か分かる方がおられましたらご教授をお願いいたします。


KG  2007-08-15 21:25:51  No: 99315

sParmは"FormMain"であってFormMainではないからObjectにSetしても
Formにはなれません。

Me.Controls(sParm).Show

みたいにしてできないでしょうか。

#検証はしておりません。


魔界の仮面弁士  2007-08-15 21:58:18  No: 99316

> String型の変数へフォーム内のオブジェクト名あるいはフォーム名を代入して
> フォームの制御又は、フォームのShowを実行させたいと思っております。

そういう時は、「フォーム名」を String 型で渡すのではなく、
「フォームそのもの」を Form 型で渡した方が良いかと。

> 上記記述ですと、エラーになってしまいます。

フォーム名からフォームオブジェクトを生成するには、
  Dim S As String
  S = "Form2"
  Dim F As Form
  Set F = Forms.Add(S)
  Load F
  F.Show vbModeless
のように、Forms.Add メソッドを用いるという手法があります。


KG  2007-08-16 04:19:52  No: 99317

はっ、、そうか、探すぐらいなら生成したほうが確実だ、、、orz


魔界の仮面弁士  2007-08-16 06:46:02  No: 99318

>>  Set F = Forms.Add(S)
>>  Load F
>>  F.Show vbModeless
すみません。上記の 2 行目は削除してください。
Add メソッドで生成したときは、Load ステートメントは不要です。

うっかり、
  Set F = New Form2   ' Form2 の Initialize イベントが発生
  Load F    ' Form2 の Load イベントが発生
  F.Show vbModeless
の構文と混同していました……。
(Forms.Add の場合、自動的に Load 処理まで行われます)

> はっ、、そうか、探すぐらいなら生成したほうが確実だ、、、orz

ただし、フォームの二重起動などを避けたいのであれば、
生成前に 『Forms コレクション』内を列挙して、目的のフォームが
既にロード/表示されていないかを確認する必要があるでしょう。

# なお、Forms コレクションに登録されるのは、
# Form が生成されたときではなく、Form がロードされた時です。


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

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






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