VB.netで別のフォームを表示するには?

解決


tomo  2003-05-07 23:16:39  No: 107032

VB.netに関してなんですが、まったくの初心者で分からないことだらけです。
今、メインのフォームがありましてそのフォームから別のフォームを表示しようとしています。メインのフォームは閉じることはしたくないのでEnableをFalseにして別のフォームを表示しています。しかし、別のフォームを閉じる時に、メインのフォームのEnableをTrueにしてもTrueにならないのです。どのようにしたら分かりません。


nanashi  2003-05-08 19:40:39  No: 107033

普通にTrueになります。
Trueにならない、というのはただTrueにならないだけで何もエラーが出ないのでしょうか?

ちなみにShowDialogで表示すればモーダルになるので 呼び出しフォームのEnabledをFalseにするより楽です。


tomo  2003-05-08 20:26:21  No: 107034

呼び出しフォームにコマンドボタンが使用できないんですが。とくにエラーとかは発生していません。


nanashi  2003-05-08 21:21:02  No: 107035

どのイベントで処理してるのでしょうか?

てゆーか、問題になってる部分のソースの一部を提示してもらえると回答しやすいです。


tomo  2003-05-08 21:43:03  No: 107036

Form1でコマンドクリックイベントで以下の様にしています

Private Sub Button1_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button1.Click

        Dim frm As Windows.Forms.Form = New Form2()

        frm.Show()
        Me.Enabled = False

End Sub

そして、開かれたForm2でボタンがクリックされたときにForm2を閉じ、Form1のEnableをTrueにしています。

Private Sub Button1_Click(ByVal sender As System.Object, _
        ByVal e As   System.EventArgs) Handles Button1.Click

        Dim frm As Windows.Forms.Form = New Form1()

        frm.Enabled = True
        Me.Close()

End Sub


nanashi  2003-05-08 22:49:04  No: 107037

そりゃ無理ってもんです。

>        Dim frm As Windows.Forms.Form = New Form1()
>
>        frm.Enabled = True
>        Me.Close()

ここでのfrmというオブジェクトは今開いているForm1のことではなく
このプロシージャ内で新しくインスタンスを作成されたForm1のことです。
(表示されていないだけで、Form1がもう一つ作られています)
これでは今開いているForm1は何も操作されません。

標準モジュール内でPublic指定でForm1用のオブジェクトを用意してください。
具体的には以下のようになります。

'標準モジュール--------------------------------
    Public frm1 as Form1

    Public Sub Main()
       frm1 = New Form1

       frm1.ShowDialog()
    End Sub

'フォーム1------------------------------------
    Private Sub Button1_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button1.Click

        Dim frm As Windows.Forms.Form = New Form2()

        frm.Show()
        Me.Enabled = False
    End Sub

'フォーム2------------------------------------
    Private Sub Button1_Click(ByVal sender As System.Object, _
        ByVal e As   System.EventArgs) Handles Button1.Click

        frm1.Enabled = True
        Me.Close()
    End Sub

もちろん、スタートアップはSub Mainにしておく必要があります。


tomo  2003-05-08 23:11:18  No: 107038

ありがとうございました。試してみます。いまいち、フォーム操作がまだ分からないので・・・。  ご教授ありがとうございました。


Y2  2003-05-21 20:15:55  No: 107039

.NETを使っている人は、オブジェクト指向を勉強したほうが良いと思いますよ。(クラスとか)
これを知らないと、VB.NETを使いこなすことはできないです。
ここで問題となっているWindows.Forms.FormやForm2もクラスですから、その仕組みを学習すれば、自然と問題は解決するでしょう(^Д^)


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

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






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