VB.NET2003 Windows2000環境です。
こちらの掲示板でお世話なっているゴロベエです。
早速質問なのですが、フォームが表示されている、されていないの判断はどのように行えばよろしいのでしょうか?
フォーム1のボタン1を押すとフォーム2が表示(モードレス)されるのですが、フォーム1のボタン1を押す限り、何個もフォーム2が出てきてしまいます。
フォーム2が表示されている時は、ボタン1を押してもフォームを表示させないようにしたいのですが、やり方がどうも分かりません。
回答よろしくお願いいたします。
過去ロゴ検索『別フォーム』で引っ掛かる質問をいくつか読めば
理解できると思います。↓順に読んでいって応用して下さい。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200405/04050010.txt
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200409/04090099.txt
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200410/04100060.txt
…ああ、ちなみに
>フォームが表示されている、されていないの判断はどのように行えばよろしいのでしょうか?
を単語の意味通り解釈するとフォームの .Visible プロパティ を見る事になります。
実際は
>フォーム2が表示されている時は、ボタン1を押してもフォームを表示させないようにしたいのですが
という事で、フォームを新規にメモリにロードしないようなサンプルを紹介しました。
フォームは New した時点でメモリに実体化(インスタンスの生成)します。Show を実行しないと
画面に見えない(表示しない)状態で実体は存在する…という状態になります。Show した
フォームを破棄せずに Hide などをしても同じ状態になります。詳しくは New やオブジェクトの
インスタンス生成といった事について学んで下さい。
この2つは意味が違いますので、質問する場合も正確に区別できる単語を使えるように
して下さい。
特攻隊長まるるうさん返信ありがとうございます。
以下の方法で解決いたしました。
■■■Form1■■■
Public Class Form1
Inherits System.Windows.Forms.Form
Dim Form_2 As New Form2
〜以下省略〜
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If Form_2.Visible = False Then
Form_2.Show()
Form_2.Activate()
Else
Form_2.Activate()
End If
End Sub
End Class
■■■Form2■■■
Private Sub Form2_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
e.Cancel = True
Me.Hide()
End Sub
常にメモリにForm2を持たせておいて、表示・非表示をただ行うという事で思っていたとおりには動きました。ただこれがやり方として一番ベストだということは分かりませんが・・・
特攻隊長まるるうさん本当にありがとうございました。
かなり良いのではないでしょうか?(^^)
あとは Form2 を閉じようとするとキャンセルされ、
非表示のまま残りますので、Form1 が閉じる時に
明示的に破棄するコードも書いておくほうが良い
かもしれません。
[VB.NET]
■■■Form1■■■
Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
Me.Form_2.Dispose()
Me.Form_2 = Nothing
End Sub
まあ、アプリケーションが終了すれば破棄されるみたいですが、
意識して自分で破棄したほうが良いでしょう。
特攻隊長まるるうさん返信ありがとうございます。
>意識して自分で破棄したほうが良いでしょう。
上記の事を考えてPGに埋め込み明示的に分かりやすくしました。
本当に助かりました。ありがとうございました!