- 題名: 画面の最前面にメッセージを表示させる方法
- 日時: 2005/03/03 21:00:18
- ID: 9544
- この記事の返信元:
- (なし)
- この記事への返信:
- [9546] Re[1]: 画面の最前面にメッセージを表示させる方法2005/03/03 21:28:01
- ツリーを表示
おはようございます、じゃんぬねっと です。 ■No9554に返信(平ちゃんさんの記事) 案その 1 (下策) オーナーのオーナーを利用する。 1 方のフォームが閉じる時、開く時にオーナーをすり替える方法。 サブフォームが、単一であるのならば、そこそこ使えますが難点が多々あります。 フォームが増えると似たような実装が必要となる。 フォームの型を毎回判断せねばならないため、拡張性には長けていない。 FormMain:------------------------------------------------ Friend Class FormMain Inherits System.Windows.Forms.Form ' _______________________ '| Windows フォーム デザイナで生成されたコード | '  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ '/ プライベート メンバ Private hFormSub As FormSub Private hFormHelp As FormHelp '/ サブ フォームを開く Private Sub Button1_Click(...) Handles Button1.Click hFormSub = New FormSub() Me.AddOwnedForm(hFormSub) hFormSub.Show() End Sub '/ ヘルプ フォームを開く Private Sub Button2_Click(...) Handles Button2.Click hFormHelp = New FormHelp() If hFormSub Is Nothing OrElse hFormSub.IsDisposed Then Me.AddOwnedForm(hFormHelp) Else hFormSub.AddOwnedForm(hFormHelp) End if hFormHelp.Show() End Sub '/ メッセージ ボックスの表示 Private Sub Button3_Click(...) Handles Button3.Click MessageBox.Show("メッセージ ボックスですが、何か?") End Sub End Class FormSub:------------------------------------------------- Friend Class FormSub Inherits System.Windows.Forms.Form ' _______________________ '| Windows フォーム デザイナで生成されたコード | '  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ '/ Load 時に FormHelp の存在している場合は所有をすり替え Private Sub FormSub_Load(...) Handles MyBase.Load If TypeOf Me.Owner Is FormMain Then For Each hForm As Form In Me.Owner.OwnedForms If TypeOf hForm Is FormHelp Then Me.AddOwnedForm(hForm) End If Next hForm End If End Sub '/ Close 時に HelpForm が存在している場合は所有をすり替え Private Sub FormSub_Closed(...) Handles MyBase.Closed For Each hForm As Form In Me.OwnedForms If TypeOf hForm Is FormHelp Then If TypeOf Me.Owner Is FormMain Then Dim hOwnerForm As Form = Me.Owner Me.Owner = Nothing hForm.Owner = hOwnerForm End If End If Next hForm End Sub End Class
分類:[.NET]
こんにちは 平ちゃんです。
いつも有難うございます。すみませんがまたアドバイスをお願いします。
画面の最前面にメッセージを表示させる方法です。
現状はメッセージボックスでユーザーに注意を促しています。
この場合、メッセージボックスが最前面に表示されなければ、操作不可能になり色々と面倒です。
アプリのイメージとして
@ 起動すると基本フォームを表示
A 基本フォームからユーザが必要ならヘルプ画面を表示できる。ヘルプ画面は常に最前面 (TopMost = True) 表示。
(ヘルプ画面を見ながら実際の操作が出来るように作っています)
B 基本フォームから別の操作フォームを新たに起動する。基本フォームのボタンを操作する必要があるので、モーダレスとし、
基本フォームに所有させて、基本フォームの前面に重ねて表示します。
C ヘルプ画面が表示されている場合に操作フォームを起動してもヘルプ画面は最前面表示。
このような場合に入力ミスなどでメッセージボックスを表示した場合、ヘルプ画面の背後になると、操作不可能となります。
これを防ぐためにメッセージボックスを
MessageBox.Show メソッド (String, String, MessageBoxButtons, MessageBoxIcon, MessageBoxDefaultButton, MessageBoxOptions)
で MessageBoxOptions = DefaultDesktopOnly で使っています。
ところがテストしてみると
xp, 2000 では問題ないのですが、98 の場合 ヘルプ画面の背後になり不具合です。
そこで教えて頂きたいのは
ヘルプ画面、メッセージボックスをどの様にしたらよいかという案です。
私が考えている案は、メッセージボックスをメッセージ用のフォーム(TopMost = True)に置き換えるという方法です。
MessageBox.Show メソッド (IWin32Window, String) でもいいのですが、常にIWin32Window を管理する必要があり面倒です。
(なおタスクバーには操作フォームは表示しないようにしています)