- PR -

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

投稿者投稿内容
YUKO
会議室デビュー日: 2005/10/11
投稿数: 8
投稿日時: 2005-10-11 17:08
VB6で開発しています。
下のようにコーディングし、同じフォームを使って複数画面が表示されるようにしました。しかし、これだと、ボタンを押す度に新しい画面が表示されてしまいます。
新しい画面を表示するのは、一回きりにしたいと思っています。
(一度、押すと二度目からは画面が表示されないようにする。)
どうすればいいんですか?

Private Sub Command2_Click()
Dim frm As Form1

Set frm = New Form1
frm.Caption = "Form1のコピーだよ"
frm.Visible = True
End Sub
Yam
大ベテラン
会議室デビュー日: 2003/09/13
投稿数: 179
お住まい・勤務地: だんじり祭りの地
投稿日時: 2005-10-11 17:16
Yamと申します。

方法は色々ありますが、
ボタンを使用不可にするのがお手軽かと思います。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-11 17:19
こんにちは、じゃんぬ です。

仕様によっては Modal 表示するべきだと思います。
Modeless 表示にするのであれば、プライベート メンバにしてインスタンスを見るとか。
VB6 だと暗黙のインスタンス化をするフォームを使えば単一にはなりますがw

# Visible = True ではなく、Show メソッドの方が好きかなぁ。
# Show(vbModal) をご存知ないようにも見えてしまいます。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
YUKO
会議室デビュー日: 2005/10/11
投稿数: 8
投稿日時: 2005-10-11 17:35
Yamさん、じゃんぬねっとさん、ご親切にどうもありがとう。
細かい仕様を伝えてなくてゴメンなさい。
大元の画面に複数ボタンがあって、どれを押しても画面が開くようにしたいんです。
だから、vbModalは使えないんです。
ボタンを仕様不可にするのは確かにお手軽な方法だけど、ボタンがグレーアウトしちゃうのが、ちょっと、気に入らなくて・・・。
他に何かいい方法ありませんか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-11 17:44
情報共有のためにクロスサイトポストリンクさせてください。
http://forums.belution.com/ja/vb/000/013/93s.shtml

引用:

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

大元の画面に複数ボタンがあって、どれを押しても画面が開くようにしたいんです。
だから、vbModalは使えないんです。
ボタンを使用不可にするのは確かにお手軽な方法だけど、ボタンがグレーアウトしちゃうのが、ちょっと、気に入らなくて・・・。
他に何かいい方法ありませんか?


フラグを設置するか、インスタンス化されて表示しているかを確認するとか...
後者については先にも書きましたが、詳しく説明すると Forms コレクションなんかが使えるかな...
私は、使ったことないですけど...w

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-10-11 17:45
引用:

YUKOさんの書き込み (2005-10-11 17:35) より:
Yamさん、じゃんぬねっとさん、ご親切にどうもありがとう。
細かい仕様を伝えてなくてゴメンなさい。


複数のインスタンスを生成したいからForm1.Showも駄目と言う事でよいですか?
後は普通にFormのメンバ変数にするとか、Collectionを使って、インスタンスを管理するぐらいしか思いつかないですね。

[ メッセージ編集済み 編集者: 甕星 編集日時 2005-10-11 17:50 ]
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2005-10-11 17:54
・Formsを回して、当該フォームがあるかどうか確認する。
てのもできるかなと。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-11 17:54
引用:

甕星さんの書き込み (2005-10-11 17:45) より:

複数のインスタンスを生成したいからForm1.Showも駄目と言う事でよいですか?
後はCollectionを使って、インスタンスを管理するぐらいしか思いつかないですね。


どうやら、Forms コレクションだと同一の型のフォームでの識別はできなさそうですね。
ボタンによって、起動する Form が別であれば良いのですが。

コード:

    Dim hForm As Form

    For Each hForm In Forms
        If hForm.Name = "Form2" Then
            Exit Sub
        End If
    Next hForm

    Dim hForm2 As Form2
    Set hForm2 = New Form2
    Call hForm2.Show


ダメであれば、Private あるいは Static なフラグ、
インスタンスを管理するコレクションを自作することになりますね。
手軽なのはフラグですが、少し泥臭いかもしれませんね。

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

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