Namespace System Namespace Windows Namespace Forms Enum DialogResult None = NULL 'ダイアログ ボックスから Nothing が返されます。つまり、モーダル ダイアログ ボックスの実行が継続します。 Abort = IDABORT 'ダイアログ ボックスの戻り値は Abort です (通常は "中止" というラベルが指定されたボタンから送られます)。 Cancel = IDCANCEL 'ダイアログ ボックスの戻り値は Cancel です (通常は "キャンセル" というラベルが指定されたボタンから送られます)。 Ignore = IDIGNORE 'ダイアログ ボックスの戻り値は Ignore です (通常は "無視" というラベルが指定されたボタンから送られます)。 No = IDNO 'ダイアログ ボックスの戻り値は No です (通常は "いいえ" というラベルが指定されたボタンから送られます)。 OK = IDOK 'ダイアログ ボックスの戻り値は OK です (通常は "OK" というラベルが指定されたボタンから送られます)。 Retry = IDRETRY 'ダイアログ ボックスの戻り値は Retry です (通常は "再試行" というラベルが指定されたボタンから送られます)。 Yes = IDYES 'ダイアログ ボックスの戻り値は Yes です (通常は "はい" というラベルが指定されたボタンから送られます)。 End Enum Class Form Inherits ContainerControl Public Sub Form() With createParams .Style or= WS_OVERLAPPEDWINDOW or WS_VISIBLE or WS_CLIPSIBLINGS or WS_CLIPCHILDREN .ExStyle or= WS_EX_WINDOWEDGE or WS_EX_CONTROLPARENT or WS_EX_APPWINDOW .Width = 300 .Height = 300 End With End Sub Function ShowDialog() As DialogResult Dim isParentEnable = False If Not ActiveBasic.IsNothing( This.Parent ) Then ' 親コントロールを無効にする isParentEnable = This.Parent.Enabled This.Parent.Enabled = False End If This.Show() ' メッセージループ Dim msg As MSG, iResult As Long Do iResult=GetMessage(msg,0,0,0) If iResult=0 or iResult=-1 Then Exit Do If IsDialogMessage(This.Handle,msg) Then Continue TranslateMessage(msg) DispatchMessage(msg) Loop If Not ActiveBasic.IsNothing( This.Parent ) Then ' もともと親コントロールが有効だった場合には有効に戻す If isParentEnable Then This.Parent.Enabled = True End If End If Return msg.wParam As DialogResult End Function End Class End Namespace End Namespace End Namespace