2012-11-14 15 views
5

Voglio impedire che la mia applicazione desktop venga ingrandita. Non dovrebbe diventare massimizzato con ogni mezzo - con un doppio clic sulla barra del titolo, oppure facendo clic su Windows + Freccia sulla tastiera, ecc

-> a disattivare sia la MaximizeBox e MinimizeBox.
-> Ho anche impostare il MaximumSize e MinimumSize per il mio WinForm

Eppure quando si preme Windows + Up freccia, il mio modulo vittoria si sposta a alto a sinistra dello schermo, voglio dire che viene massimizzato . Quindi, per favore dimmi un modo per evitare che ciò accada ...Prevenire l'ingrandimento di Winform?

+3

Considera di creare un'altra domanda per la tua seconda domanda sulle scorciatoie – emartel

+0

Ho fatto anche questo, e ho trovato tutto su google. Alcune proprietà che devi impostare su false, alcune che devi sostituire. – Pavenhimself

risposta

10

Ci sono in realtà due problemi completamente separati al lavoro qui. Certo, sembrano fondamentalmente gli stessi da una prospettiva funzionale, ma da una prospettiva di modello di implementazione (come Windows userebbe naturalmente) non sono correlati.

Come altri hanno risposto, è possibile impedire che il modulo venga ingrandito impostando la proprietà MaximizeBox su false. Ciò rimuove lo WS_MAXIMIZEBOX style nella finestra sottostante del modulo, che impedisce al gestore di finestre di consentire l'ingrandimento della finestra. Disabilita la casella di ingrandimento sulla barra dei sottotitoli della finestra (quella tra la casella di riduzione a icona e la casella di chiusura), disattiva l'opzione "Ingrandisci" nel menu finestra/sistema e qualsiasi altro metodo per massimizzare una finestra che potrei aver dimenticato.

Tuttavia, questo non ha nulla a che fare con la combinazione di tasti Win + , che invoca Aero Snap lo stesso come sarebbe trascinare la finestra nella posizione di magia sedevano i bordi dello schermo.Il window manager, sia come risultato di un bug o di una funzionalità di Aero Snap, consente comunque di "massimizzare" in modo efficace le finestre che non dovrebbero altrimenti essere massimizzate. L'impostazione della proprietà MaximizeBox non influisce su questo, quindi se vuoi davvero impedire all'utente di modificare le dimensioni della finestra in questo modo, dovrai disabilitare l'effetto Aero Snap sulla tua finestra.

Sfortunatamente, non c'è alcun metodo (almeno non a mia conoscenza) di disabilitare Aero Snap a livello di programmazione su una finestra o per processo (vedere anche this related question). Se l'utente ha Aero Snap abilitato, si può presumere che desiderano che il comportamento e le applicazioni non siano autorizzati a manometterlo. L'unica cosa che puoi fare è disabilitare completamente il ridimensionamento della tua finestra. In WinForms, lo fai impostando la proprietà FormBorderStyle in uno dei seguenti: FormBorderStyle.FixedSingle, FormBorderStyle.Fixed3D o FormBorderStyle.FixedDialog. Se vuoi comunque ridimensionare la tua finestra in altri modi, dovrai scrivere il codice per gestirlo manualmente, il che non è un compito particolarmente facile.

Pertanto, vi incoraggio a considerare molto attentamente se ciò è veramente necessario. Tutte le altre finestre non massimizzabili ottengono ciò semplicemente impostando la proprietà MaximizeBox (o facendo l'equivalente nel loro framework UI), il che significa che possono ancora essere massimizzate efficacemente tramite Aero Snap. Se questo funziona per le finestre di tutti gli altri, inclusi quelli che fanno parte di Windows stesso, probabilmente dovrebbe funzionare per te.

+1

Mi sono imbattuto in questo aspetto per una risposta simile e l'impostazione di MaximizeBox su false sembra impedire qualsiasi percorso di massimizzazione. Immagino che questo sia stato risolto tra adesso e la pubblicazione di questa risposta. O mi sono perso qualcosa? – Karlovsky120

9

Il modulo ha una proprietà chiamata MaximizeBox - impostare su false.

Per quanto riguarda la seconda domanda, consultare this question and it's answers per i modi migliori per implementare le scorciatoie da tastiera in WinForms.

+1

MaximizeBox = false non fermerà la scorciatoia Windows + Freccia su per massimizzare qualsiasi finestra ... Se non sbaglio, coz m affronta lo stesso problema nella mia applicazione .... –

+0

Puoi sempre disabilitare la scorciatoia Windows + Up pure, e quindi concentrarsi sul rendere disponibile ogni altra scorciatoia da tastiera .. – lifetimes

+0

Dovrebbe funzionare, ma non è così. Hammering funziona, https://stackoverflow.com/a/47994707/17034 –

1

C'è una proprietà della classe Form denominata "MaximumBox" devi impostare False nella finestra delle proprietà del tuo modulo ... Questo in realtà impedirà al modulo di essere massimizzato in qualsiasi modo ... Inoltre se vuoi per controllare le dimensioni del modulo si può lavorare con tali proprietà come "MinimumSize, MaximumSize" impostando i loro valori a vostra discrezione o la creazione di un gestore di eventi per gli eventi MaximumSizeChanged e MinimumSizeChanged ...

+0

Questa cosa non funziona ... La finestra si sta spostando verso l'angolo in alto a sinistra proprio come quando si tenta di massimizzare un dos a 16 bit basato applicazione sul tuo sistema operativo Windows 32-bit ... Va semplicemente nell'angolo in alto a sinistra e quindi nega qualsiasi movimento, come quando si ingrandisce una finestra ... Intendo dire che la dimensione rimane la stessa, ma tutte le altre proprietà sono uguali come quando una qualsiasi finestra normale è massimizzata .. C'è un modo per risolvere questo problema ... ?? –

3
this.FormBorderStyle = FormBorderStyle.FixedSingle; 

Quella riga di codice impedirà l'utente da ridimensionare la finestra.

Oltre a ciò si nasconde/disattiva la casella di ingrandimento e ciò dovrebbe fare ciò che si è chiesto.

Per disattivare usa la casella di ingrandimento questa

this.MaximizeBox = false; 

Per nascondere la casella massimizzare l'uso anche questo

this.MinimizeBox = false; 

Se ingrandire e ridurre sono impostati su false i pulsanti scompaiono.

+0

Compara questo, ma sto avendo un modulo personalizzato con FormBorderStyle = FormBorderStyle.None. C'è un altro modo per farlo ... –

+0

È possibile sopprimere la combinazione 'WINKEY + UP' per evitare di massimizzare la finestra. Oltre a ciò, impostare la dimensione massima/minima su un valore fisso.Questa soluzione sembra piuttosto sporca, ma se il tuo requisito è l'opzione "FormBorderStyle.None", probabilmente è la soluzione migliore. –

1

L'impostazione di MaximumSize uguale alla dimensione (o al formato) interrompe almeno le finestre a schermo intero. Si aggancia ancora all'angolo in alto a sinistra, ma è comunque almeno una finestra e sembra giusta - come se Windows fosse stupido invece del tuo programma.

2

È possibile evitare che le finestre scattare verso l'angolo in alto a sinistra impostando:

private void toolbox_Move(object sender, EventArgs e) 
{ 
    this.WindowState = FormWindowState.Normal; 
} 

in caso mossa del modulo.

1

È possibile provare a RegisterHotKey Win + Up se la finestra o l'applicazione è attivata e annullare la registrazione di questo tasto di scelta rapida se è disattivato. È necessario prendere il tasto di scelta rapida e restituire il valore appropriato per impedire un'ulteriore elaborazione.

Vedere WM_ACTIVATEAPP, WM_ACTIVATE e WM_NCACTIVATE. Il primo può essere utilizzato se si desidera disabilitare Win + UP per tutte le finestre.