tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
システムモーダルメッセージボックスのアイコンの変更方法(VB.NET) ( No.1 )  [親スレッドへ]
日時: 2010/01/21 14:03
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[メッセージ][][]                                                    *
* キーワード:システムモーダル,MsgBoxStyle.SystemModal,MsgBox,最前面,          *
***********************************************************************************
タイトル : システムモーダルメッセージボックスのアイコンの変更方法
記 事 No : 9792
投 稿 日 : 2010/01/16(Sat) 12:44
元質問者 : こたろう

----------------------------------------------------------------------------------
投 稿 日 : 2010/01/19(Tue) 23:21
回 答 者 : 魔界の仮面弁士  

> MsgBox("テスト", MsgBoxStyle.SystemModal)
メッセージボックスのスタイルは OS によっても差異があるため、
アイコン等の細かい制御が必要なのであれば、
フォーム等で自作される事をお奨めします。


> メッセージボックスの動作としては、システムモーダルがいいので、
> “システムモーダル以外に”というのはなしでお願いします。
その没案の「システム モーダル以外」を使うという話になってしまうのですが、
『最前面表示させたアプリケーション モーダル』を使うのはどうでしょう?

Const MB_TOPMOST As Integer = &H40000
MsgBox("アプリケーション モーダル With TopMost", MB_TOPMOST Or vbApplicationModal)
http://msdn.microsoft.com/ja-jp/library/cc410914.aspx

(MB_TOPMOST を指定するなら、MessageBox API を使った方が良いかも)

あるいは、MessageBox.Show で MessageBoxOptions.ServiceNotification とか。

----------------------------------------------------------------------------------
投 稿 日 : 2010/01/21(Thu) 13:21
回 答者 : 魔界の仮面弁士  

# 追記

Option Strict On で実行していた場合、Integer のままだとエラーになりますので、
> Const MB_TOPMOST As Integer = &H40000
の部分は、
Const MB_TOPMOST As MsgBoxStyle = CType(&H40000, MsgBoxStyle)
の方が良いかもしれません。


> MsgBox("アプリケーション モーダル With TopMost", MB_TOPMOST Or vbApplicationModal)
追試してみたところ、Form 等から呼び出した場合と、コンソールアプリから呼び出した場合とでは、
上記の結果が微妙に変わってくるようです。コンソールからだと、最前面にならない事があります。

その場合には、MB_TOPMOST だけでなく、vbMsgBoxSetForeground (あるいは、
MsgBoxStyle.MsgBoxSetForeground) も一緒に指定しておくと、求める結果に
近くなるかと思います。


Const MB_TOPMOST As MsgBoxStyle = CType(&H40000, MsgBoxStyle)
MsgBox("Test1")
MsgBox("Test2", vbMsgBoxSetForeground)
MsgBox("Test3", MB_TOPMOST)
MsgBox("Test4", MB_TOPMOST Or vbMsgBoxSetForeground)
MsgBox("Test5", vbSystemModal)

それぞれ微妙に結果が異なりますので、期待する動作に近いものを選んでみてください。
その結果、どれも期待する結果にならないのであれば、同等の画面を自作された方が良いでしょう。



 [スレッド一覧へ] [親スレッドへ]