DOBON.NET DOBON.NETプログラミング掲示板過去ログ

今のフォームを閉じて新フォームの表示

環境/言語:[Windows XP]
分類:[.NET]

フォームについてですが
●新しいフォームを表示する【別窓】
と、
●フォームを閉じる・・・(今のフォーム)
を同時にしたくて、ここにあるサンプルプログラムをボタンクリックのイベントで処理してみたんですが、そのままひとまとめにして記述したらエラーになります
どうしたらいいのでしょぅか?
よろしくおねがいします
失礼しました
VB.NETです
どのようなエラーが発生しているのでしょうか?
普通に、Close()してShow()するだけだと思うのですが・・・??
あと、どのサンプルコードを利用したかも紹介されると良いと思います。
お世話になります。

■No13827に返信(trapemiyaさんの記事)
サンプルはこちらですかね?

[新しいフォームを表示する]
http://dobon.net/vb/dotnet/form/showform.html
[フォームを閉じる]
http://dobon.net/vb/dotnet/form/closeform.html
> サンプルはこちらですかね?
>
> [新しいフォームを表示する]
> http://dobon.net/vb/dotnet/form/showform.html
> [フォームを閉じる]
> http://dobon.net/vb/dotnet/form/closeform.html

そうですそうです
この二つを一つにいろいろと組み合わせたりしてやってみると
いろんなエラーになるんです

どのようにしたらいいんでしょうか?
お世話になります。

■No13829に返信(なるほどさんの記事)
> そうですそうです
> この二つを一つにいろいろと組み合わせたりしてやってみると
> いろんなエラーになるんです
>
> どのようにしたらいいんでしょうか?

trapemiya さんもおっしゃっていますが、
例えば、具体的にはどの様に組み合わせて、
どの様な例外が投げられますか?
> trapemiya さんもおっしゃっていますが、
> 例えば、具体的にはどの様に組み合わせて、
> どの様な例外が投げられますか?

ぇーとですね
いろんなことやってもうまくいかなかったんです
そのいろんなパターン(エラーも含めて)をここで説明するのもちよっと大変のような気がします
最初に申し上げましたように
ボタンクリックのイベントで処理・・ひとまとめに(一つで)して処理するにはどうしたらよいか?
なんですけど、このような質問ではダメでしょうか?

ちょっと前までやってたパターンをそのまま載せます

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Me.Close() '消えるがエラー
'Form2クラスのインスタンスを作成する
Dim f As New Form2

'Form2を表示する
'ここではモーダルダイアログボックスとして表示する
Me.Close() ''消えるがエラー
'オーナーウィンドウにMeを指定する
f.ShowDialog(Me)
'Me.Close()'Form1は消えない
'フォームが必要なくなったところで、Disposeを呼び出す
f.Dispose()
'Me.Close() 'Form1は消えない
End Sub

ただ単純にそのまんま一つにしようとして
Me.Close() をどこに置けば?と思ってやってました

よろしくお願いします
お世話になります。

■No13834に返信(なるほどさんの記事)
> ぇーとですね
> いろんなことやってもうまくいかなかったんです
> そのいろんなパターン(エラーも含めて)をここで説明するのもちよっと大変のような気がします
> 最初に申し上げましたように
> ボタンクリックのイベントで処理・・ひとまとめに(一つで)して処理するにはどうしたらよいか?
> なんですけど、このような質問ではダメでしょうか?

そうですか。
やりたい事は、スレッドのタイトルどおり、
今のフォームを閉じて新フォームの表示、つまり画面遷移がやりたい
という事ですよね。

一例をかきますね。
プロジェクトのプロパティ→スタートアップの設定を Sub Main にする。
プロジェクトに、以下のファイルを追加。
・Class1 (クラス)
・Form1(フォーム。ボタンを 1 つ配置)
・Form2(フォーム。ボタンを 1 つ配置)

・Class1 (クラス)のコード
Public Class Class1
  <STAThread()> _
  Friend Shared Sub Main()
    Dim f1 As Form1 = New Form1
    Dim f1_result As Integer

    f1_result = f1.ShowDialog()
    f1.Dispose()
    'Form1 で、Button1 がクリックされた場合のみ Form2 へ遷移する
    If f1_result = DialogResult.OK Then
      Dim f2 As Form2 = New Form2
      Dim f2_result As Integer
      f2_result = f2.ShowDialog()
      f2.Dispose()

      If f2_result <> DialogResult.OK Then
        Throw New Exception("Form2 で OK 以外のボタンが押されました")
      End If
    End If
  End Sub
End Class

・Form1 のコード(Form2は、Public Class Form1 を Public Class Form2 としただけ)
Public Class Form1
  Inherits System.Windows.Forms.Form

#Region " Windows フォーム デザイナで生成されたコード "

#End Region

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Me.DialogResult = DialogResult.OK
    Me.Close()
  End Sub
End Class
どうもどうも
なおこさん!ありがとうございます
また明日やってみます
(もぅ寝ますので、あしからず)
・・ですので、まだちょと暫く『解決済み』は待ってください
うまくいくとは思いますけど。初心者な者で・・アセ
m(_ _)m
■No13835に返信(なおこ(・∀・)さんの記事)
> 一例をかきますね。
> プロジェクトのプロパティ→スタートアップの設定を Sub Main にする。

エントリ ポイントではうまくいくでしょうね。
Application.Run でフォームを起動した場合で困っているのではないでしょうか?

> Dim f1_result As Integer
> Dim f2_result As Integer

Integer ではなく、System.Windows.Forms.DialogResult の方が好ましいですね。

> If f1_result = DialogResult.OK Then
> If f2_result <> DialogResult.OK Then

Option Strict On であればコンパイル エラーになりますからね。
型は強く明示化して越したことはないです。

> f2.Dispose()

できたら、Try 〜 Finally で保証してください。

> Throw New Exception("Form2 で OK 以外のボタンが押されました")

強制終了する他ないですし、例外を投げる意味はないのではないでしょうか?

細かいことに口出しすいません。
なおこさん
じゃんぬねっとさん

ありがとうございます
ここらでとりあえず中締めとゅぅことで
『解決済み』とさせて貰います

>例外が投げられますか・・・(・_・;) ン?
>エントリ ポイント・・・(・_・;) ン?
>Application.Run・・・(・_・;) ン?

とゅぅレベルの者ですので、、
ズバリいって、まだうまくいってませんです

も少し試行錯誤して出直してまいります
またよろしくお願いします
解決済み!
お世話になります。

一応張っておきますね。
http://www.bcap.co.jp/hanafusa/bbs/wforum.cgi?mode=allread&no=2388&page=0

■No13929に返信(なるほどさんの記事)
> なおこさん
> じゃんぬねっとさん
>
> ありがとうございます
> ここらでとりあえず中締めとゅぅことで
> 『解決済み』とさせて貰います
>
> >例外が投げられますか・・・(・_・;) ン?
> >エントリ ポイント・・・(・_・;) ン?
> >Application.Run・・・(・_・;) ン?
>
> とゅぅレベルの者ですので、、
> ズバリいって、まだうまくいってませんです
>
> も少し試行錯誤して出直してまいります
> またよろしくお願いします
>
解決済み!
フォーーーー♪(HGフゥ)
今、風呂から出てきました<そんなことぁどぅでもいいって?

ぃぁぃぁ、どもども、なおこさん!ありがとうございます
リンク先・・参考に見させて貰います
今日はもぅちょとしたら寝ます。。おこちゃまなもんで(ウソ?
わからないことが多すぎて多すぎて
先日、『ランゲージリファレンス』を購入しましたが
なんか、、もっと初級編から行かなキャ?と思ってます。

なおこさんみたいな優しい人が(ヨイショ?失礼)傍にいてくれたらなぁ・・
解決済み・・が消えてましたので、、
再投稿しておきます
おやすみなさいませませ。。。。。。。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板