2012-09-14 2 views
7

Come posso disabilitare il pulsante di chiusura di un modulo come nell'immagine qui sotto? (L'immagine qui sotto mostra una finestra MessageBox)Posso disabilitare il pulsante "chiudi" di un modulo usando C#?

enter image description here

Il MessageBox sopra è stato generato da me! Voglio disabilitare il pulsante di chiusura di un modulo normale.

+0

Non riesco a vedere l'immagine? :(:( –

+2

Probabilmente non dovresti: gestiscilo come "No". In alternativa, puoi creare il tuo modello pop-up e progettarlo come preferisci. – musefan

+0

"X" equivale a "No" nelle conferme. l'utente fa clic, non sa cosa rispondere, quindi * devi * lasciare che decidano senza toccare nulla. – Alex

risposta

9

gestire il chiusura evento (e non l'evento Closed) del modulo.

E quindi si utilizza e.CloseReason per decidere se si desidera realmente bloccarlo (UserClose) o meno (chiusura TaskManager).

Inoltre, c'è un piccolo esempio Disabling Close Button on Forms su codeproject.

3

Si dovrebbe ignorare la funzione CreateParams derivato da System.Windows.Forms.Form

e cambiare lo stile di classe

myCp.ClassStyle = 0x200; 
12

Fare clic destro sulla finestra in questione, quindi scegliere Proprietà. In Proprietà fai clic su Eventi. Fare doppio clic sull'evento FormClosing.

Il seguente codice sarà generato da Progettazione Windows Form:

private void myWindow_FormClosing(object sender, FormClosingEventArgs e) 
{ 

} 

semplicemente aggiornare il codice per assomigliare a questo (aggiungere e.Cancel = true;):

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

il gioco è fatto!

In alternativa, se si desidera disabilitare la chiusura, massimo, e ridurre al minimo i pulsanti della finestra:

È possibile fare clic destro la finestra in questione, quindi scegliere Proprietà. In Proprietà impostare la proprietà ControlBox su false.

+0

Questo è esattamente quello che cercavo! avendo un'esperienza di winform minima (in precedenza solo per ASP.net) questo ha aiutato! Grazie! – Ric

7

Se si sta lavorando con una finestra secondaria MDI e si disabilita il pulsante di chiusura durante la creazione della finestra (ovvero si desidera disabilitarlo in determinati momenti durante la vita del modulo), nessuna delle soluzioni proposte in precedenza funzionerà¹.

Invece dobbiamo usare il seguente codice:

[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); 
} 

¹ È possibile impostare ControlBox = false se non si desidera alcun pulsante, ma non è questo che la questione sta chiedendo.

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