- PR -

Windowsアプリケーションでの画面遷移について

1
投稿者投稿内容
えっこ
常連さん
会議室デビュー日: 2004/05/11
投稿数: 29
投稿日時: 2004-07-20 15:28
お世話になります。
現在、exe→exeと複数のexeをまたいで画面遷移するようになっています。
exeは各機能ごとにまとめられていて、1つのexeに複数のフォームが
含まれています。
exeからexeへ遷移する場合は発生しないのですが、同一exe内のフォームを
何度も行き来すると、「使用されたパラメータが無効です」というエラーが
発生します。
これを回避する方法はないでしょうか?
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-07-20 15:47
引用:

えっこさんの書き込み (2004-07-20 15:28) より:
exeからexeへ遷移する場合は発生しないのですが、同一exe内のフォームを
何度も行き来すると、「使用されたパラメータが無効です」というエラーが
発生します。
これを回避する方法はないでしょうか?


フォームの遷移?を繰り返すと一般的に発生するような問題であれば別ですが、たいていの場合はそうではないので、一般的な回避方法を求めるのは無理があります。

まず、何をしているところでエラーが発生するのか、エラーの詳細情報、フォームの遷移はどのように行っているのか、フォームのインスタンス生成はその場でやっているのか、スタートアップフォームからの遷移はどうなっているのか、等々不明な点が多くあります。

おそらくコード上に問題がある可能性の方が高いので、まずはもう少し詳細な情報を出してみましょう。
えっこ
常連さん
会議室デビュー日: 2004/05/11
投稿数: 29
投稿日時: 2004-07-20 16:42
引用:

なちゃさんの書き込み (2004-07-20 15:47) より:
まず、何をしているところでエラーが発生するのか、エラーの詳細情報、フォームの遷移はどのように行っているのか、フォームのインスタンス生成はその場でやっているのか、スタートアップフォームからの遷移はどうなっているのか、等々不明な点が多くあります。


VB.NET初心者なので、至らぬところがあったと思います。すみません。
フォームAからフォームBに、フォームBからフォームAに遷移を
繰り返し、フォームBをロードしようとする時点でさきほどのエラーが
発生します。しかし、デバッグ中には発生せず、exeにした状態で
はじめて発生するような状況です。
ですので、具体的にどこが原因なのか今のところ不明です。

画面の遷移ですが、
1、フォームBに遷移するボタンを押下
2、レジストリに遷移元のフォーム名・遷移先のフォーム名を書き込む
3、
Close()←遷移元のフォームを閉じる
G_frmOpenForm.Dispose()←フォームインスタンスを破棄し初期化
G_frmOpenForm = New frm_t020←新インスタンスの生成
G_frmOpenForm.ShowDialog()←遷移先フォーム表示

以上のようになっております。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-07-20 17:31
引用:

えっこさんの書き込み (2004-07-20 16:42) より:

発生します。しかし、デバッグ中には発生せず、exeにした状態で
はじめて発生するような状況です。


 そういう場合は、デバッグプリント文をあちらこちらに挿入し、どこまで実行されたかを把握します。
 また、エラーメッセージも、メッセージウインドウに表示されるものは、詳細も含めてすべて(ソースは除く)正確に転記してください。

 パラメータが無効、ということは、メソッドに引き渡す引数の文字列や型が間違っている可能性が高いです。それらをデバッグプリントしてみてください。

※デバッグプリント
 System.Diagnostics.Debug クラス を参照してください。
えっこ
常連さん
会議室デビュー日: 2004/05/11
投稿数: 29
投稿日時: 2004-07-20 19:12
引用:

Jittaさんの書き込み (2004-07-20 17:31) より:
そういう場合は、デバッグプリント文をあちらこちらに挿入し、どこまで実行されたかを把握します。
 また、エラーメッセージも、メッセージウインドウに表示されるものは、詳細も含めてすべて(ソースは除く)正確に転記してください。

 パラメータが無効、ということは、メソッドに引き渡す引数の文字列や型が間違っている可能性が高いです。それらをデバッグプリントしてみてください。

※デバッグプリント
 System.Diagnostics.Debug クラス を参照してください。


それで一応、試してみます。
今回、出たエラーですが以下エラー詳細部分↓
=========================================
************** 例外テキスト **************
System.ArgumentException: 使用されたパラメータが無効です。
at System.Drawing.Bitmap..ctor(Int32 width, Int32 height, PixelFormat format)
at System.Drawing.Bitmap..ctor(Int32 width, Int32 height)
at System.Drawing.Icon.ToBitmap()
at System.Windows.Forms.ThreadExceptionDialog..ctor(Exception t)
at System.Windows.Forms.ThreadExceptionDialog..ctor(Exception t)
at System.Windows.Forms.ThreadContext.OnThreadException(Exception t)
at System.Windows.Forms.Control.WndProcException(Exception e)
at System.Windows.Forms.ControlNativeWindow.OnThreadException(Exception e)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.ComponentManager.System.Windows.Forms.UnsafeNativeMethods+IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.RunDialog(Form form)
at System.Windows.Forms.Form.ShowDialog(IWin32Window owner)
at System.Windows.Forms.Form.ShowDialog()
at WindowsApplication1.frm_t010.btnTrhkiIns_Click(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-07-21 08:59
アプリケーションのメインウインドウを閉じたりしていませんか?
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-07-21 10:18
引用:

えっこさんの書き込み (2004-07-20 16:42) より:
3、
Close()←遷移元のフォームを閉じる
G_frmOpenForm.Dispose()←フォームインスタンスを破棄し初期化
G_frmOpenForm = New frm_t020←新インスタンスの生成
G_frmOpenForm.ShowDialog()←遷移先フォーム表示


スタートアップフォーム、閉じてますねぇ、多分…
あと、次の表示直前にDisposeするのは何か理由があるんでしょうか?

スタートアップのフォームを閉じると、そこでアプリケーションのメッセージループが終了してしまうと思います。
※通常のアプリケーション実行状態から抜けてしまう(微妙な表現)ということです。
その後、ShowDialogで表示しているので、一見アプリケーションの実行が普通に継続しているように見えるのでしょうけど…

ってこれ、その後スタートアップのフォームに戻るときってどうやってるんでしょ?
行き来を何度も繰り返すとってのは、一度行って戻ったくらいでは発生しないって事ですか?
引用:

2、レジストリに遷移元のフォーム名・遷移先のフォーム名を書き込む


レ、レジストリ…
いやま、理由があるんなら別に止めはしないんですが。
1

スキルアップ/キャリアアップ(JOB@IT)