- PR -

VB6でのフォームの制御について

投稿者投稿内容
YUKO
会議室デビュー日: 2005/10/11
投稿数: 8
投稿日時: 2005-10-11 17:55
甕星もありがとう。
まったく、そのとおりです!
複数のインスタンスを生成したいんです。
「Formのメンバ変数にするとか、Collectionを使って、インスタンスを管理する」って
具体的にはどうすればいいんですか?
なにぶん初心者なものですから・・・。
もう少し、おしえてもらえませんか?
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2005-10-11 18:45
引用:

甕星もありがとう。


「さん」を付けましょうね。(^^/

引用:

大元の画面に複数ボタンがあって、どれを押しても画面が開くようにしたいんです。
複数のインスタンスを生成したいんです。


#混乱してきました。
「画面」とは同じものを指してますか?それともボタンごとに違う画面でしょうか?

メンバ変数にするとは、
ボタンのクリック内でDim frm As Form1とSet frm = New Form1としてますよね。
これだとローカル変数なのでそのプロシージャ内でしか見れないのです。
変数にはスコープ(適用範囲)というものがあり、
例えばフォームの(General)にPrivate frm As Form1と書けばフォーム内のどこからでも見れるようになります。
ここまでくればあとはその変数が空っぽかどうかで判断できますよね。

Collectionに関しては、上記の保存する情報をひとつの入れ物に入れてまとめて管理しましょうということです。
YUKO
会議室デビュー日: 2005/10/11
投稿数: 8
投稿日時: 2005-10-11 19:08
甕星さん、ゴメンなさい。
「さん」を付け忘れてましたね。
まどかさん、ありがとう。
もう少し詳しく説明します。
「画面」とは、ひとつです。いわゆる、メニューですね。
たとえば、それにボタンを2つ置きます。
それらいずれのボタンを押しても同じフォームを使って、最大2つのフォームを表示したいんです。
だから、ひとつのボタンについて言えば、フォームが表示されるのは1回だけにしたいんです。
説明は、以上。
グローバルでとればいいんですね!?
でも、その変数がからっぽかどうか?なんてどうやってしらべるんですか?
すみません。
何もわかってなくて・・・。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-11 19:37
こんにちは、じゃんぬ です。

引用:

YUKOさんの書き込み (2005-10-11 19:08) より:

それらいずれのボタンを押しても同じフォームを使って、
最大2つのフォームを表示したいんです。


引用:

だから、ひとつのボタンについて言えば、フォームが表示されるのは1回だけにしたいんです。


この 2 つでは微妙に意味合いが異なります。
多分後者で良いのでしょう。
で、グレーダウンはさせたくないということですよね。

先ほどから何度も回答していますが、思いつくものを列挙。
  • Static もしくは Private なフラグを使う。
  • CommandButton を BorderLine のない Frame に入れて、Frame を Disable にする。
  • Forms コレクション内を先に示した例のように検索する


引用:

グローバルでとればいいんですね!?


私だけでなく何人もの方が言っていますが、プライベート メンバでいいです。

引用:

でも、その変数がからっぽかどうか?なんてどうやってしらべるんですか?
すみません。
何もわかってなくて・・・。


先の私のコードが答えそのものだったりしますが、どうなんでしょう。
空というよりは存在しないと言うべきなのでしょうか?
"何が" 判らないのかが、判らないので教えたくても書けないように思えます。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2005-10-11 20:21
>でも、その変数がからっぽかどうか?なんてどうやってしらべるんですか?

「からっぽ」というのが分かりにくいなら、たとえば

Private フォームA用 As Integer
Private フォームB用 As Integer

で、ボタンAで表示されるときに「フォームA用」を1に、
クローズされるときに0にしてあげるとかでも、良いのですよ。
Integerなら、調べ方は分かりますよね?
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2005-10-12 00:22
引用:

それらいずれのボタンを押しても同じフォームを使って、最大2つのフォームを表示したいんです。
だから、ひとつのボタンについて言えば、フォームが表示されるのは1回だけにしたいんです。


つまり、フォームモジュールは一つだけれど
それぞれのボタンでそれ専用のフォームを表示したいと。
ボタンとフォームインスタンスが一対一ですね。

まず、それぞれのボタンに対応したフォームのインスタンスを入れておく変数を用意しましょう。
#変数のスコープはいいですね?
そしてそれぞれのボタンで先に作った変数でフォームを表示します。
その際に変数が空っぽだったら表示、じゃなかったらそのインスタンスを利用してアクティブにしたりします。
空っぽについては「Nothing」を調べてみましょう。
YUKO
会議室デビュー日: 2005/10/11
投稿数: 8
投稿日時: 2005-10-12 07:50
おはようございます。
みなさん、ありがとうございます。
ようやく、わかりはじめてきました。
ところで、まどかさん。
「Nothing」を使ってからっぽかどうか調べてみました。

Dim frm As Form1
Set frm = New Form1
If frm = Nothing Then
Exit Sub
End If

すると「if」文で「オブジェクトの使い方が不正」というエラーになりました。
「Nothing」ってどうやって使うの?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-12 08:51
引用:

YUKOさんの書き込み (2005-10-12 07:50) より:

すると「if」文で「オブジェクトの使い方が不正」というエラーになりました。
「Nothing」ってどうやって使うの?


流石にこれは調べて頂きたかったのですが、ずばり答えを書きます。

コード:

If obj Is Nothing Then
  
End If


こんな風に使います。

さて、私が Nothing の使い方に躓いたのならば、使っているであろうソースを探します。
http://www.google.co.jp/search?hl=ja&q=If+Nothing&lr=lang_ja

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)