Uz Galaxy - Info Archive top BBS   RSS
Info Archive  Drag&Drop - Drag&Drop で ApplicationModal を指定した MsgBox を表示すると  

Windows XP SP1
VB.NET 2003
.NET Framwork 1.1

ドロップ時に ApplicationModal を指定したメッセーボックスを表示すると、ドロップされたフォームのアクティブ状況により動作が異なる。

フォームがアクティブな状態でドロップされると、ApplicationModal が有効な状態でメッセージボックスが表示されます。

フォームがアクティブではない状態でドロップされると、ApplicationModal が効かず、フォームが有効なままです。
この状態でフォームを先に閉じて、メッセージボックスの OK ボタンをクリックして閉じると、アプリケーションの画面はなくなりますが、アプリケーションが終了しません。

再現コード:
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.AllowDrop = True
    End Sub

    Private Sub Form1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles MyBase.DragEnter
        e.Effect = DragDropEffects.Copy
    End Sub

    Private Sub Form1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles MyBase.DragDrop
        MsgBox("MsgBox", MsgBoxStyle.ApplicationModal)
    End Sub
 

回避方法

この現象を回避するには、ドロップ時にフォームをアクティブにしてから、MsgBox を呼び出すか、MsgBox の変わりに、MessageBox を使用する。
このことを考えると、MsgBox より MessageBox.Show を使ったほうが安全かもしれません。

■ドロップ時にフォームをアクティブにしてから、MsgBox を呼び出す
    Private Sub Form1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles MyBase.DragDrop
        Me.Activate()
        MsgBox("MsgBox", MsgBoxStyle.ApplicationModal)
    End Sub
 

■MsgBox の変わりに、MessageBox を使用する
    Private Sub Form1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles MyBase.DragDrop
        MessageBox.Show(Me, "MessageBox", "Caption", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
    End Sub
 


Copyright © 2004 Uz. All rights reserved.
http://uzgalaxy.com/
このページはInfoArchiveで作成されています。