ユーザーがフォームを閉じられないようにしたいアプリケーションがあります。わかりました、簡単です。ControlBox = false
フォームに セットするだけ。
ただし、フォームの左上隅にアプリケーション アイコンを保持したいと考えています。マイナーなことはわかっていますが、詳細は私にとって何かを意味します。
を設定するControlbox = false
と、アプリケーションのアイコンがフォームの左上隅から消えます。これを回避する方法はありますか??
ユーザーがフォームを閉じられないようにしたいアプリケーションがあります。わかりました、簡単です。ControlBox = false
フォームに セットするだけ。
ただし、フォームの左上隅にアプリケーション アイコンを保持したいと考えています。マイナーなことはわかっていますが、詳細は私にとって何かを意味します。
を設定するControlbox = false
と、アプリケーションのアイコンがフォームの左上隅から消えます。これを回避する方法はありますか??
これが私が使用したコードです。
それの私のVB.Netバージョン。
Private Const CP_NOCLOSE_BUTTON As Integer = &H200
Protected Overrides ReadOnly Property CreateParams() As Windows.Forms.CreateParams
Get
Dim mdiCp As Windows.Forms.CreateParams = MyBase.CreateParams
mdiCp.ClassStyle = mdiCp.ClassStyle Or CP_NOCLOSE_BUTTON
Return mdiCp
End Get
End Property
条件付きでクローズを無効にするオプションが必要だったので(標準MessageBox
がYesNo
質問に対して行うように)、受け入れられた回答が機能しないか、それを機能させる方法がわからない可能性があります。私はこれで終わった
Private Const MF_BYPOSITION As Int32 = &H400
Private Const MF_REMOVE As Int32 = &H1000
Private Declare Auto Function GetSystemMenu Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal bRevert As Int32) As IntPtr
Private Declare Auto Function GetMenuItemCount Lib "user32.dll" (ByVal hMenu As IntPtr) As Int32
Private Declare Function DrawMenuBar Lib "user32.dll" (ByVal hwnd As IntPtr) As Boolean
Private Declare Auto Function RemoveMenu Lib "user32.dll" (ByVal hMenu As IntPtr, ByVal nPosition As Int32, ByVal wFlags As Int32) As Int32
Public Sub DisableCloseButton(ByVal hwnd As IntPtr)
Dim hMenu As IntPtr, n As Int32
hMenu = GetSystemMenu(hwnd, 0)
If Not hMenu.Equals(IntPtr.Zero) Then
n = GetMenuItemCount(hMenu)
If n > 0 Then
RemoveMenu(hMenu, n - 1, MF_BYPOSITION Or MF_REMOVE)
RemoveMenu(hMenu, n - 2, MF_BYPOSITION Or MF_REMOVE)
DrawMenuBar(hwnd)
End If
End If
End Sub
経由で呼び出す
DisableCloseButton(MyForm.Handle)
カスタム メッセージ ボックスに使用していたので、再度有効にする方法はテストしていません。