0

ユーザーがフォームを閉じられないようにしたいアプリケーションがあります。わかりました、簡単です。ControlBox = falseフォームに セットするだけ。

ただし、フォームの左上隅にアプリケーション アイコンを保持したいと考えています。マイナーなことはわかっていますが、詳細は私にとって何かを意味します。

を設定するControlbox = falseと、アプリケーションのアイコンがフォームの左上隅から消えます。これを回避する方法はありますか??

4

2 に答える 2

2

これが私が使用したコードです。

それの私の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
于 2015-02-04T13:51:02.223 に答える
1

条件付きでクローズを無効にするオプションが必要だったので(標準MessageBoxYesNo質問に対して行うように)、受け入れられた回答が機能しないか、それを機能させる方法がわからない可能性があります。私はこれで終わった

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)

カスタム メッセージ ボックスに使用していたので、再度有効にする方法はテストしていません。

于 2016-07-11T16:01:00.583 に答える