• ベストアンサー

C# showdialogの戻り値について

お世話になります。 C#2005で開発をしております。 質問内容を以下に記述致します。 FormA及びFormBがあり以下の処理を実行します。 (1)FormAからFormBをShowdialogで呼び出す (2)FormBにて任意の処理を実行する (3)FormAがFormBを閉じ、戻り値を受け取る ここで(3)の時に戻り値をDialogResult以外の戻り値で取得したいのですが、 方法はございますでしょうか。 可能であればint型数値で戻り値を設定したいと考えております。 お手数ですがご教示いただければ幸いに存じます。 以上宜しくお願い申し上げます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

既存のShowDialog()を利用せず、FormBでShowDialog()をオーバーロードすればいいのでは。 【Form1.cs】 Form2 form = new Form2(); int result = form.ShowDialog(); Console.WriteLine(result); 【Form2.cs】 DialogResult result = base.ShowDialog(); if (result == System.Windows.Forms.DialogResult.OK) { return 0; } else { return 1; } みたいな。 また、ShowDialog()で制御がFormAに戻ってくるタイミングは、FormBが閉じられた時です。 つまり、(3)の前半部分はShowDialog()では実現できません。

origin_93
質問者

お礼

早速のご回答誠にありがとうございました。 悶々としていたのでとても助かりました。 感謝感謝です。

関連するQ&A

  • showdialogを使わずにモーダル表示したい。

    VB2005環境です。 FormAから、FormBをShowしています。 FormB画面がある時は、FormAを触らせたくないので、 モーダル表示にしたいと考えているのですが、元々Showして 作っており、更にFormAがFormBのCloseイベントをハンドルして いろいろ処理を書いたせいか、原因が特定できないのですが、 ShowDialogしてcloseすると ystem.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。 とのエラーが出ます。 ShowでFormBを起動する作りのまま、FormAだけ触れないように したいのですが、Showでモーダル表示にできるような方法が ありましたら教えていただけないでしょうか? 宜しくお願いします。

  • 戻り値について

    プログラミング初心者です。 よろしくお願いします。 C++を使っています。 早速なのですが、以下にプログラムを記載します。 ◎1---------------------------------------- #include<stdio.h> main() { char ss[256]; gets(ss); puts(ss); } ---------------------------------------- ◎1を実行すると、「型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません」と表示されます。 参考書には、「戻り値のvoidがないと勝手に戻り値の関数をint型と解釈する。関数の宣言と定義が合わないとコンパイル時にエラーとなる」とあったのですが、 ◎2------------------------------------- #include<stdio.h> int main() { char ss[256]; gets(ss); puts(ss); } ------------------------------------- 以上の◎2だと、なぜ実行出来るかよくわかりません。 本当に初心者的な質問ですいませんが、教えていただけると嬉しいです。

  • バッチファイル 戻り値

    いつも大変御世話になっております。 WindowsVISTA環境で以下バッチ【ABC.bat】が稼動します。 "ABC.bat"------------------------------------------------- @ECHO ON set bat_name="ABC.bat" call DEF.bat echo %bat_name% は戻り値 %ERRORLEVEL% を受け取りました。 "ABC.bat"------------------------------------------------- 上記バッチの構文では以下バッチDEF.batを起動させ、ERRORLEVELを取得させます。 "DEF.bat"------------------------------------------------- @ECHO ON set bat_name="DEF.bat" exit /b 10 "DEF.bat"------------------------------------------------- 実行結果は予想していたものと違っていました。 予想していた実行結果 : "ABC.bat" は戻り値 10 を受け取りました。 実際の実行結果     : "DEF.bat" は戻り値 10 を受け取りました。】 %ERRORLEVEL%のみを取得したかったのですが DEF.bat の set bat_name="DEF.bat" までも取得してしまいました。 bat_name はどうしても "ABC.bat"とCALLする側の変数を使用したいのですが 制御は難しいでしょうか? echo %bat_name% は戻り値 %ERRORLEVEL% を受け取りました。 の直前に 再度 set bat_name="ABC.bat" と記述しなければダメでしょうか? 尚、都合上、ECHO文と変数名は変えたくありません。 もしご存知の方がいらっしゃるようでしたら、お手数ですが 実現可能かどうかをご回答願いますでしょうか? 以上、何卒宜しくお願い致します。

  • DataGridViewの再描画。

    度々スイマセン。 VB2005、SQLServer2005環境です。 FormA、FormBの2つのフォームがあり、FormAはデータを表示、 FormBはそれに対してデータを追加するというプログラムを 作っています。 FormBでデータを登録し、FormBを閉じたタイミングで、 FormAのDataGridViewを再描画して、最新のデータの状態に したいのですが、うまくいきません。 ---FormAで記述しているコード--- Public Sub Form_Closed(ByVal sender As Object, ByVal e _ As System.Windows.Forms.FormClosedEventArgs) '登録終了時に、グリッドを再表示 '再表示 Me.TestTableAdapter.Fill(Me.DataSet1.Test) End Sub ---FormBで記述しているCD--- Private Sub FormB_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Load AddHandler Me.FormClosed, AddressOf FormA.Form_Closed End Sub 上記のように、FormBが閉じた時に、イベントで、 Me.TestTableAdapter.Fill(これの中身は、該当テーブルをアスタで すべて取得してます)を呼んでいます。 FormAには削除処理もあって、その時は、Deleteが流れた後に Me.TestTableAdapter.Fillを呼んだらデータが最新の状態になった ので、これで出来るかと思ったのですが…。 Fillの後にDatagridView.Refreshも追加してみましたが、 ダメでした。 どうすれば再描画できるでしょうか? ご教授ください。

  • 実行結果を戻り値で取得したい

    MS-DOSバッチの実行結果を文字列で取得したいです。 イメージ例としては、下記のようなバッチ2つがあり、 バッチAを起動します。そうすると実行結果の戻り値として 「TEST」という文字列が取得できたら良いです。  ※下記例では「ERRORLEVEL」に入っているようなイメージです。 しかしながら、ERRORLELVEに格納できるのは数値のみの為、 エラーになってしまいます。 どうすれば、実行結果を戻り値で取得できるでしょうか? お手数ですが、MS-DOSで不可能な場合、VBScriptやWSHでも かまいませんので、処理をキックしてその戻り値を文字列で取得する方法を お教えください。お願いいたします。 -------------------------------- 例 【バッチA】 call バッチB echo %ERRORLEVEL% 【バッチB】 exit /b "TEST" -------------------------------- と実行し

  • DataGridViewの再表示方法

    VB2005、SQLServer2005環境です。 FormA、FormBの2つのフォームがあり、FormAはDataGridViewでデータを表示し、 FormBはFormAで選択されたデータを呼び出し修正処理を行っています。 質問は、FormBでデータを登録し、FormBを閉じたタイミングで、 FormAのDataGridViewを再描画して最新のデータを表示したいのですが、うまくいきません。 <FormAで記述しているCD> Private Sub BTN_Data表示ボタン_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles BTN_Data表示ボタン.Click Dim strsql As String ' レコードを取得し、データグリッドに表示する '---DB接続 '---SQL文を作成して実行する strsql = "SELECT コード, 氏名 FROM TBLA ORDER BY コード Dim comm As SqlCommand = New SqlCommand(strsql, Con) '---データアダプタを生成 Dim dataadapter As SqlDataAdapter = New SqlDataAdapter(comm) dataadapter.MissingSchemaAction = MissingSchemaAction.AddWithKey '---データセット Dim ds As DataSet = New DataSet() dataadapter.Fill(ds, "TBLA") '---DataSet を DataGridView control と連結 dgrSyain.DataSource = ds dgrSyain.DataMember = "TBLA" '---DB切断 Call Disconnect() End Sub <FormBで記述しているCD> Private Sub BTN_更新_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN_更新.Click '---FormBの内容を更新する処理----- Me.Close() End Sub 上記の、FormBが閉じる時のイベントで、ResetBindingsを使えばいいのかと思いましたが どこにどう記述すればよいかわかりませんでした。 どうすれば再描画できるでしょうか? ご教授ください。

  • バッチで戻り値を返したい

    VisualBasic6.0 バッチ処理で戻り値に数値を返したいのですが、 Main()でどう記述すればよろしいのでしょうか? 理由 バッチ(VB)でエラーになっているのに正常終了してしまい、ジョブスケジューラが異常終了しないため、 バッチ側でエラーコードを返せば異常終了になるんじゃないかということで検討しています。 VBもJP1も知識不足ですのでどなたかアドバイスおねがいします。

  • Process.Startの戻り値を後で取得

    お世話になっております。 作業マシン:WINDOWS Server2008 (仮想) 開発ツール:VWD2010(VB) 使用DB:SQLServer2008R2 にて、Webアプリを開発しております。 ASP.NET開発の経験はおおよそ1ヶ月半程です。 現在、Process.Startで外部exeを実行しております。 この外部実行ファイルは3分くらい掛かる処理で、 WaitForExit() で結果を待たずに 次の画面(待機用画面)に遷移しています。 処理が終了したら、待機画面から結果画面へと遷移させたいのですが、 プロセスの完了と、その結果(戻り値)を、 Process.Startをコールした画面以外で受け取る事が出来るのでしょうか。 WaitForExitを使用するならば、 素直に終了を待ち、終了後にExitCodeを取得、 Ret = Process.Start() で戻り値も取得できましたが… WaitForExit( ) をしない場合、どのようにして取得できるのでしょうか。 http://dobon.net/vb/dotnet/process/openfile.html こちら等、Process.Start 非同期 などのキーワードで出てくるのは Processを実行した同画面内での待機のケースが多く、 今自分が遭遇しているケースに応用するには どうにも自分の理解が追いつけず質問いたします。 実行する画面でプロセスIDを取得し、セッションに持たせ、 終了を判断したい画面でプロセスIDを元にチェックをする… と言うことも考えてみましたが、プロセスIDを頼りに、 終了したプロセスの戻り値を突き止める方法も見つからず (発想自体が間違っているかもしれません) 皆様のお力を貸して頂けないでしょうか。何卒よろしくお願いします。

  • アプリケーションに戻り値を設定したい。

    C♯でアプリを作っています。 exeをバッチからキックして、実行結果の戻り値を取得したいと思っています。 (成功時0、エラー時-1) 現在、エントリポイントが [STATread] static void Main() { } となっていますが、これを static int Main() { int retVal=0; try { { catch (exception) retVal -1;l } Finally { return retVal; } のように変更すれば取得できるでしょうか? 稚拙な質問で申し訳ないですが、宜しくお願いします。

  • プロシージャの戻り値を取得する方法

    perlからSQLPLUS->プロシージャを実行してその戻り値を取得。 戻り値が0なら次の処理へ、0以外ならエラー処理へというようなことをやりたいと思っています。 perlの実行コマンドは以下。 $sqlcmd = "sqlplus$DBUSER$PASS\@DB_ALIAS\@$SQLFILE $OUTFILE"; $sql_ret = system("$sqlcmd") >>8; この$sql_retにプロシージャの戻り値が入るようにしたいのです。 プロシージャを実行する$SQLFILEは以下のようなSQLです。 --------------------------------------------------- set serveroutput on WHENEVER SQLERROR EXIT 1 spool &1; DECLARE RetVal NUMBER; BEGIN RetVal := 実行ストアドファンクション; END; / spool off; EXIT SQL.SQLCODE; ---------------------------------------------- エラーが起きたときにファンクションは1を返すようにしているのですが、 それがSQLPLUSの実行結果の戻り値に反映されません。 どうしたらいいのでしょうか? よろしくお願いします。

専門家に質問してみよう