質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

デザイン

プログラミングでのデザインとは、プログラムの構成や、使用の信頼性・持続性・正確性・利便性の目標達成にはどうするのがベストなのか特定の選択を行うことです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

26349閲覧

フォームを別のフォームから閉じる方法(VB.Net)

nakajob

総合スコア13

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

デザイン

プログラミングでのデザインとは、プログラムの構成や、使用の信頼性・持続性・正確性・利便性の目標達成にはどうするのがベストなのか特定の選択を行うことです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2018/06/27 07:12

編集2018/06/27 07:57

前提・実現したいこと

初めて質問をさせていただきます。

作成しているもの:Windows フォーム アプリケーション

開発環境
OS: Windows 10 64bit
.NET Framework: Version 4.7.03056 SP1Rel
開発ツール: Visual Studio 2010 Professional
使用言語: VB.Net

発生している問題

フォームを別のフォームから閉じる方法を教えてください。
例えば
親フォームが frmMain
子フォームが Form1とForm2とします。
frmMainからボタンでForm1を開きます(Form1.show())
その後frmMainから別のボタンでForm2を開きます(Form2.show())

この時にForm2を開く時にForm1が開いていれば、そのフォームを閉じるという 方法を知りたいです。
frmMainから(From1.Close())を試してもダメでした。

よろしくお願いします。

##追加です

VB.net

1frmMain.vb 2 3Public Class frmMain 4 Public Shared index As Integer 5 6 Private Sub frmMain_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 7 Dim f As New frmMain() 8 '表示位置 9 f.StartPosition = FormStartPosition.WindowsDefaultLocation 10 '最大サイズと最小サイズを現在のサイズに設定する 11 Me.MaximumSize = Me.Size 12 Me.MinimumSize = Me.Size 13 Me.TopMost = False 14 Me.FormBorderStyle = FormBorderStyle.None 15 End Sub 16 Private Sub btn_frm1_Click(sender As System.Object, e As System.EventArgs) Handles btn_frm1.Click 17 If index = 1 Then 18 Else 19 Dim f As New From1() 20 f.FormBorderStyle = FormBorderStyle.None 21 f.Top = Me.Top 22 f.Left = Me.Left 23 f.StartPosition = FormStartPosition.Manual 24 f.Show() 25 MsgBox("close") 26 Form2.Close() 27 index = 1 28 End If 29 End Sub 30 31Private Sub btn_frm2_Click(sender As System.Object, e As System.EventArgs) Handles btn_frm2.Click 32 If index = 2 Then 33 Else 34 Dim f As New From2() 35 f.FormBorderStyle = FormBorderStyle.None 36 f.Top = Me.Top 37 f.Left = Me.Left 38 f.StartPosition = FormStartPosition.Manual 39 f.Show() 40 MsgBox("close") 41 Form1.Close() 42 index = 2 43 End If 44 End Sub 45End Class 46 47Form1.vb 48Public Class From1 49 Private Sub From1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 50 51 '最大サイズと最小サイズを現在のサイズに設定する 52 Me.MaximumSize = Me.Size 53 Me.MinimumSize = Me.Size 54 ' このフォームを常に最前面に表示する 55 Me.TopMost = True 56 End Sub 57End Class 58 59Form2.vb 60Public Class From2 61 Private Sub From2_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 62 63 '最大サイズと最小サイズを現在のサイズに設定する 64 Me.MaximumSize = Me.Size 65 Me.MinimumSize = Me.Size 66 ' このフォームを常に最前面に表示する 67 Me.TopMost = True 68 End Sub 69End Class 70コード

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YAmaGNZ

2018/06/27 07:21

再現可能なソースの記述をお願いします。
nakajob

2018/06/27 07:41

フォームの表示の部分のみを抜き取った形になりますが、ご了承ください。
papinianus

2018/06/27 08:03 編集

C#のタグとってください→ありがとうございます
nakajob

2018/06/27 07:57

取りました。
guest

回答2

0

ベストアンサー

ボタンのClickイベント内でForm1(Form2)のインスタンスを作成しています。
このインスタンスとForm1.Closeで指定しているForm1のインスタンスが異なることが原因です。

VB.NET

1 2Public Class frmMain 3 Private f1 As Form1 4 Private f2 As Form2 5 6 Private Sub btn_frm1_Click(sender As System.Object, e As System.EventArgs) Handles btn_frm1.Click 7 f1 = New From1() 8 f1.FormBorderStyle = FormBorderStyle.None 9 f1.Top = Me.Top 10 11 If f2 IsNot Nothing Then 12 f2.Close() 13 End If 14 End Sub

といった感じでインスタンスを格納する変数の宣言場所を変えるか

VB.NET

1 Private Sub btn_frm1_Click(sender As System.Object, e As System.EventArgs) Handles btn_frm1.Click 2 From1.FormBorderStyle = FormBorderStyle.None 3 From1.Top = Me.Top 4 5 From2.Close() 6 End Sub

といった感じで暗黙で宣言されているForm1等を使用するかだと思います。

投稿2018/06/27 07:51

編集2018/06/27 07:52
YAmaGNZ

総合スコア10222

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nakajob

2018/06/27 08:01

2つのうちの最初の方法で行いましたが、一度閉じた後に再度開こうとすると以下のエラーが表示されます。 破棄されたオブジェクトにアクセスできません。
papinianus

2018/06/27 08:05

Closeしたので、破棄してますよね。用途にもよりますが、Visibleを使ったほうがいいのでは?
nakajob

2018/06/27 08:13

Visibleに変えたら思っていた通りの形になりました。 ありがとうございます。 呼び出すときはShowのままにしているのですが、呼び出しもVisibleの方がプログラム的には良いのでしょうか? 頭の悪そうな質問ですいません。
nakajob

2018/06/27 08:31

ありがとうございます。 変な気もするので変更することにします。
guest

0

フォームが開いているか、はVisibleプロパティで、最小化しているかはWidnowState(だったっけ)でみれるでしょ

んで、閉じるときはフォームのインスタンス変数でCloseしないとダメです
どっかにForm1とForm2のインスタンス変数置いときましょう
#プロパティ見ようと思ったらどのみち必要ですな

投稿2018/06/27 07:51

編集2018/06/27 07:55
y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問