- PR -

[C#]MessageBoxが最前面に表示されない

1
投稿者投稿内容
UK
常連さん
会議室デビュー日: 2005/04/11
投稿数: 32
投稿日時: 2006-05-05 17:15
標題の通り、ボタンクリックに対するイベント内でMessageBoxを表示させると、
なぜか背面に表示されてしまいます。
しかし、一度他のウィンドウ(アプリ)に切り替えて戻すときちんと表示されます。
親フォームは選択できないため、きちんとモーダルウィンドウにはなっていると考えられます。

以下、ソースを抜粋します。
何が原因でしょう・・・

コード:
    private void App1_FormClosing(object sender, FormClosingEventArgs e)
    {
      if (!saved)
      {
        if (MessageBox.Show("保存せずに終了します。よろしいですか?") == DialogResult.Cancel)
          e.Cancel = true;
      }
    }

sia
常連さん
会議室デビュー日: 2004/05/02
投稿数: 38
投稿日時: 2006-05-05 17:37
こんにちは。

親ウインドウからフォーカスがきちんと取得できていないためだと思います。
IWin32Windowを受け取る以下の形式では如何でしょうか?

DialogResult Show (
IWin32Window owner,
string text,
string caption
)
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-05-05 17:46
試したところ、UK さんの仰る通りにはならずに、UK さんの要望通りに動いてしまいました。
他に何か設定をされているのかもしれませんね。Z オーダー等はどうなっているのでしょうか。

他に気になって点は、「App1」というのは Form の事でしょうか。それとも App1 という何かのインスタンスが Form のイベントを処理しているということでしょうか。(だからといってこの問題に関係あるかどうかはわかりませんが)

後は、そのメッセージボックスの出し方では、Cancel を取得できませんね。(ただの例だと思いますが)
_________________
囚人のジレンマな日々
sia
常連さん
会議室デビュー日: 2004/05/02
投稿数: 38
投稿日時: 2006-05-05 17:58
ちゅうか、
きっとこれですね。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=22690&forum=7
UK
常連さん
会議室デビュー日: 2005/04/11
投稿数: 32
投稿日時: 2006-05-06 00:08
すみません、解決いたしました。

Paintメッセージの処理の中であろう事かInvalidateを呼び出していることにより
ダイアログのメッセージが処理されなかった?ようです。

単純なミスでご迷惑をおかけしました。
1

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