2012-09-14 26 views
7

Jak wyłączyć przycisk zamykania formularza, jak na poniższym obrazku? (Obraz poniżej wyświetli okno MessageBox)Czy mogę wyłączyć przycisk "zamknij" formularza przy użyciu C#?

enter image description here

MessageBox powyżej zostało wygenerowane przez mnie! Chcę wyłączyć przycisk zamykania normalnego formularza.

+0

Nie widzę obrazu? :(:( –

+2

Prawdopodobnie nie powinieneś, po prostu obsłuż go tak samo jak "Nie" Alternatywnie możesz stworzyć własne wyskakujące okno i zaprojektować je tak, jak lubisz – musefan

+0

"X" jest równe "Nie" w potwierdzeniach. użytkownik to klika, nie wie, na co odpowiedzieć, więc * musisz * pozwolić im podjąć decyzję bez dotykania czegokolwiek. – Alex

Odpowiedz

9

Użytkownik obsługuje wydarzenie Zamknięcie (a nie Zamknięte) Formularza.

A następnie używasz e.CloseReason, aby zdecydować, czy naprawdę chcesz go zablokować (UserClose), czy nie (TaskManager Close).

Ponadto istnieje mały przykład Disabling Close Button on Forms na codeproject.

3

powinien zastąpić funkcję CreateParams pochodzący z System.Windows.Forms.Form

i zmienić styl Class

myCp.ClassStyle = 0x200; 
12

prawym przyciskiem myszy na oknie w pytaniu, a następnie kliknij polecenie Właściwości. W obszarze Właściwości kliknij Wydarzenia. Kliknij dwukrotnie wydarzenie FormClosing.

Poniższy kod zostanie wygenerowany przez system Windows Form Designer:

private void myWindow_FormClosing(object sender, FormClosingEventArgs e) 
{ 

} 

Wystarczy zaktualizować kod powinien wyglądać tak (dodaj e.Cancel = true;):

private void myWindow_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    e.Cancel = true; 
} 

Gotowe!

Ewentualnie, jeśli chcesz wyłączyć blisko, maksymalizacji i minimalizacji przyciski okna:

Możesz kliknąć prawym przyciskiem myszy okno w pytaniu, a następnie kliknij polecenie Właściwości. W obszarze Właściwości ustaw właściwość ControlBox na false.

+0

Dokładnie to nadążyłem! posiadanie minimalnego doświadczenia z WinForm (wcześniej tylko asp.net) pomogło! dzięki! – Ric

7

Jeśli pracujesz z okienkiem podrzędnym MDI i wyłączenie przycisku zamykania podczas tworzenia okna jest wykluczone (tzn. Chcesz je wyłączyć w określonych momentach w trakcie życia formularza), żadne z wcześniej zaproponowanych rozwiązań nie będzie działać¹.

Zamiast tego musimy użyć następującego kodu:

[DllImport("user32")] 
public static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert); 

[DllImport("user32")] 
public static extern bool EnableMenuItem(IntPtr hMenu, uint itemId, uint uEnable); 

public static void DisableCloseButton(this Form form) 
{ 
    // The 1 parameter means to gray out. 0xF060 is SC_CLOSE. 
    EnableMenuItem(GetSystemMenu(form.Handle, false), 0xF060, 1); 
} 

public static void EnableCloseButton(this Form form) 
{ 
    // The zero parameter means to enable. 0xF060 is SC_CLOSE. 
    EnableMenuItem(GetSystemMenu(form.Handle, false), 0xF060, 0); 
} 

¹ Można ustawić ControlBox = false jeśli nie chcesz żadnych przycisków, ale nie to pytanie jest pytaniem.

0
Closing += (s, eventArgs) => 
     { 
      DialogResult = DialogResult.None; //means that dialog would continue running 
     }; 
Powiązane problemy