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

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

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

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ダイアログ

ユーザーにウィンドウやボックス等の形で個別で表示されるフォームであり、ユーザーに判断を促す目的で表示される。ユーザーが見逃す事のないよう、操作中のフォーム上にポップアップして表示される。

Q&A

解決済

4回答

9479閲覧

[C#]ダイアログボックスがボタン押下せずに消える

mitts

総合スコア17

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ダイアログ

ユーザーにウィンドウやボックス等の形で個別で表示されるフォームであり、ユーザーに判断を促す目的で表示される。ユーザーが見逃す事のないよう、操作中のフォーム上にポップアップして表示される。

0グッド

0クリップ

投稿2017/01/24 03:03

###前提・実現したいこと
C#のコンソールアプリケーションでダイアログボックスを表示させる機能を実装中です
###発生している問題・エラーメッセージ
現れたダイアログボックスがOKボタンを押下せずとも消える状態に困っています。

###該当のソースコード

C#

1 private string errorMessage = "認識されない文字が書かれています。"; 2 public void DisplayErrorDialog() 3 { 4 DialogResult result = MessageBox.Show(errorMessage, 5 "エラー", 6 MessageBoxButtons.OK, 7 MessageBoxIcon.Error); 8 if(result == DialogResult.OK) 9 { 10 //プログラムの終了 11 Environment.Exit(0); 12 }

###試したこと
特にスレッドやタスクを組んだりしてはいないです

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

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

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

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

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

guest

回答4

0

ベストアンサー

手元でコンソールアプリを作って、ご提示のコードをそのまま実行してみましたが、
こちらの環境ではおっしゃる現象は再現しませんでした。

開発環境や実行環境を明示されていないのでなんともいえませんが、
本当にご提示のコードだけで同現象になりますか?

  • スレッドやタスクは使っていないとおっしゃっていますが、

一番可能性があるのはMainでないスレッドから呼ばれていることかなと思いました。

  • ダイアログを閉じるより先に元のアプリが終了されてしまっている場合などは

当然ダイアログも勝手に閉じることになります。

  • アプリケーションのMainメソッドに [STAThread] 属性を付与してもだめでしょうか

  • 前の方がおっしゃっているように、実はMessageBoxでなく自作のFormだとかでしたら、

Show()メソッドで呼び出した際や、自分でDialogResultの値を設定した場合などに同現象が起こりえます。

  • ちょっと考えにくいですが、他のセキュリティソフト等でダイアログを勝手に閉じてしまうようなものが

もしかしたらあるかもしれません。

あとは、コンソールアプリでMessageBoxを表示するという行為自体がイレギュラーではあるので、
可能ならばコンソールへのメッセージ出力を代替とするのが良いかもしれません。

投稿2017/01/24 04:13

oika

総合スコア425

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

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

mitts

2017/01/24 05:18

確認しましたが提示くださった可能性の上4つには該当しませんでした。 最後の他のソフトでダイアログを閉じるようなことを行っていないか検討してみます 回答ありがとうございました
guest

0

c#

1 class Program { 2 public static void DisplayErrorDialog() { 3 string errorMessage = "認識されない文字が書かれています。"; 4 DialogResult result = MessageBox.Show(errorMessage, 5 "エラー", 6 MessageBoxButtons.OK, 7 MessageBoxIcon.Error); 8 if (result == DialogResult.OK) { 9 //プログラムの終了 10 Environment.Exit(0); 11 } 12 } 13 static void Main(string[] args) { 14 DisplayErrorDialog(); 15 } 16 }

普通に動作しちゃいましたが…

投稿2017/01/24 03:59

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

errorMessageとDisplayErrorDialogをstaticにしたらどうなりますか?

投稿2017/01/24 03:59

dn315

総合スコア200

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

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

mitts

2017/01/24 05:19

挙動はかわりませんでした
guest

0

Show() でなく ShowDialog() を使って下さい。

投稿2017/01/24 03:28

Zuishin

総合スコア28656

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

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

Zuishin

2017/01/24 03:29

form と間違えました。 すみません。
Zuishin

2017/01/24 03:33

問題はこの部分ではなく、呼び出し元にあると思います。
mitts

2017/01/24 05:19

回答ありがとうございます 私の実行環境に原因があるようです
Zuishin

2017/01/24 05:28

実行環境というより、この関数を呼び出しているスレッドの問題だと思います。 もしかして、メッセージループしていないのではないですか?
mitts

2017/01/24 05:40 編集

言葉が足りなくて誤解させてしまいました 自分のPCのVisualStudio上で実行した場合は問題なく動作します(ダイアログボックスが表示されて消えたりしない) 自分のPC上でこのプロジェクトのexeを実行した場合も問題なく動作します。 問題が起こるのは、このexeを別のWindows PC上で実行した場合です。ダイアログボックスが一瞬現れてすぐ消えるような挙動をする状態です。
Zuishin

2017/01/24 05:46

なるほどそうでしたか。では環境に依存しているのですね。 もし exe を直接エクスプローラーか何かで起動しているのでしたら、まずコマンドプロンプトを立ち上げて実行してみると、もしかしたら何かエラーメッセージが出ているかもしれません。 相手先の PC に VisualStudio をインストールしてデバッグできるのが一番いいのですが、できない場合もありますよね。 お目汚し失礼しました。
mitts

2017/01/24 06:09

とんでもないです。丁寧な回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問