tagCANDY CGI VBレスキュー(花ちゃん) - MessageBox クラスのメッセージボックスを最前面に表示する(VB.NET) - Visual Basic 6.0 VB2005 VB2010
MessageBox クラスのメッセージボックスを最前面に表示する(VB.NET)
元に戻る スレッド一覧へ 記事閲覧
このページ内の検索ができます。(AND 検索や OR 検索のような複数のキーワードによる検索はできません。)

MessageBox クラスのメッセージボックスを最前面に表示する(VB.NET) [No.249の個別表示]
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
日時: 2010/01/21 11:47
名前: 花ちゃん

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

MsgBox("テスト", MsgBoxStyle.SystemModal)
↑のコードを実行すると、システムモーダルでメッセージボックスが表示されます。
この場合、タイトルバーの左側にデフォルトのアイコンが表示されてしまいます。
(システムモーダル以外のメッセージボックスではアイコン自体表示されません。)

このデフォルトのアイコンを指定のアイコンに変更する方法、もしくは、アイコン自体を
消す方法をお教えくださいませんでしようか?

メッセージボックスの動作としては、システムモーダルがいいので、“システムモーダル
以外に”というのはなしでお願いします。
------------------------------------------------------------------------------------
記事No : 9793
投稿日 : 2010/01/16(Sat) 16:52
回答者 : 花ちゃん

> メッセージボックスの動作としては、システムモーダルがいいので、
> “システムモーダル以外に”というのはなしでお願いします。

その理由も書き添えるようにして下さい。
そうすれば、下記のように違った解決方法もあるかと。

システムモーダル?(MsgBoxStyle.SystemModal)でなくても最前面に表示されれば
いいのではないですか?

-----------------------------------------------------------------------

'MsgBox 関数では、システムアイコンが表示される
Microsoft.VisualBasic.MsgBox("MsgBox 関数で SystemModal で表示", _
                      MsgBoxStyle.SystemModal, "")


'自身のForm を最前面に表示してそれをオーナーFormとしてメッセージボックスを最前面に表示
Me.TopMost = True
MessageBox.Show(Me, "MessageBox クラスで SystemModal 風の表示")
Me.TopMost = False


'自身の Form が最前面に表示されるのが嫌ならダミーのFormを使ってSystemModal と同様に表示
Dim dummyForm As New Form
dummyForm.TopMost = True
MessageBox.Show(dummyForm, "MessageBox クラスで SystemModal と同様に表示")
dummyForm.TopMost = False
dummyForm.Dispose()

-----------------------------------------------------------------------
それぞれ、メッセージボックスが、最前面に表示されますが、表示の仕方が若干違います。
上記のどれもが駄目なら Form 等を使って自作した方が早いかも。
メンテ

Page: 1 |

システムモーダルメッセージボックスのアイコンの変更方法(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)

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

Page: 1 |

 投稿フォーム               スレッド一覧へ
題  名 スレッドをトップへソート
名  前
パスワード (記事メンテ時に使用)
投稿キー (投稿時 投稿キー を入力してください)
コメント

   クッキー保存   
スレッド一覧へ