VB.netに関してなんですが、まったくの初心者で分からないことだらけです。
今、メインのフォームがありましてそのフォームから別のフォームを表示しようとしています。メインのフォームは閉じることはしたくないのでEnableをFalseにして別のフォームを表示しています。しかし、別のフォームを閉じる時に、メインのフォームのEnableをTrueにしてもTrueにならないのです。どのようにしたら分かりません。
普通にTrueになります。
Trueにならない、というのはただTrueにならないだけで何もエラーが出ないのでしょうか?
ちなみにShowDialogで表示すればモーダルになるので 呼び出しフォームのEnabledをFalseにするより楽です。
呼び出しフォームにコマンドボタンが使用できないんですが。とくにエラーとかは発生していません。
どのイベントで処理してるのでしょうか?
てゆーか、問題になってる部分のソースの一部を提示してもらえると回答しやすいです。
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
そりゃ無理ってもんです。
> 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にしておく必要があります。
ありがとうございました。試してみます。いまいち、フォーム操作がまだ分からないので・・・。 ご教授ありがとうございました。
.NETを使っている人は、オブジェクト指向を勉強したほうが良いと思いますよ。(クラスとか)
これを知らないと、VB.NETを使いこなすことはできないです。
ここで問題となっているWindows.Forms.FormやForm2もクラスですから、その仕組みを学習すれば、自然と問題は解決するでしょう(^Д^)
ツイート | ![]() |