#なんでそうなる!#
他愛のないことなんだけど、ぜんぜん情報がなかったので記録
###事の始まりはごく普通の画面の開発###
いつもどおり
messageboxの共通クラスを入れて(同僚のPGから流用)
親(A)画面を作り、子(B)画面を作り、などなどなど
特に問題なく簡単に完成!
で、
###ちょいテストするか~###
子(B)画面で、入力、チェックNG、エラーメッセージ出た。クリック!
「ん?」
親(A)画面がアクティブに上がってきたぞ???
#なんでそうなる!#
何回やっても同じようになる。
開発環境がおかしいのか?
windows 10 visualstudio2017 WPF .NETframework 4.5.2
(ためしにvisualstudio2010でやっても同じ)
##問題のソース##
class Class1
{
public static void errmsg(string text)
{
MessageBox.Show(text,"エラー",MessageBoxButton.OK,MessageBoxImage.Error,MessageBoxResult.OK,
MessageBoxOptions.DefaultDesktopOnly);
}
}
##何をやっても、そうなる##
何とかしようとして試してみました。
### .Active()を置いてみる###
ダメでした。
コールしてるイベントの後でAがアクティブ(画面のトップ)に来る感じ
### topmostではさんでみる ###
ダメ、ではないけれども、、、
topmostは確かにBがトップに居続けるので、見た目は問題ない
でも、アクティブはAが持っていっているので、見た目が、操作的にも問題アリ
(topmostは一番上に張り付くので、怖い)
### 共通モジュールじゃなく直接書く ###
これはOKだった。
でも、「共通化」したいのでNG
さらに、やっかいなパターンが
一回、直接書いたmessagebox.showをした後、
共通化したmessageboxだと、OK(子画面がActiveに)
(わけがわからん)
結局何が問題か&解決策 #
1.親からshowで子ダイアログを起動している
2.共通モジュールでmessagebox.showしている
3.MessageBoxOptions.DefaultDesktopOnlyをつけている
このような条件がそろうと発生。
なので
MessageBoxOptionsをつけないと発生しない。
ちなみに
ServiceNotificationでも発生するので
このオプションを省略するほうがいいかも
突っ込んで調べていないので、
「オプションをつけないことによる弊害」は調べていない
####以上(知らないソースを流用しなきゃよかった。。)####