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?
risposta
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.
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
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.
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 .... –
Puoi sempre disabilitare la scorciatoia Windows + Up pure, e quindi concentrarsi sul rendere disponibile ogni altra scorciatoia da tastiera .. – lifetimes
Dovrebbe funzionare, ma non è così. Hammering funziona, https://stackoverflow.com/a/47994707/17034 –
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 ...
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 ... ?? –
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.
Compara questo, ma sto avendo un modulo personalizzato con FormBorderStyle = FormBorderStyle.None. C'è un altro modo per farlo ... –
È 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. –
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.
È 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.
È 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.
- 1. C# WinForm - schermata di caricamento
- 2. "x" Per ridurre a icona WinForm, ContextMenu per chiudere WinForm?
- 3. MVP in Winform
- 4. Clone Winform control
- 5. Convalida UI WinForm
- 6. Elenco orizzontale winform listview
- 7. C# app.config in winform
- 8. IDataErrorInfo in winform
- 9. Winform senza framework .NET?
- 10. C# Generics e Winform
- 11. nome classe winform
- 12. Cambia winform ToolTip backcolor
- 13. Percorsi relativi in Winform
- 14. Prevenire OnErrorNotImplementedException
- 15. HTMLEncode in Winform
- 16. Classi parziali WinForm
- 17. Prevenire invii duplicati di moduli
- 18. classe di base generico per WinForm UserControl
- 19. Hosting di controlli WPF in Winform
- 20. foglio di importazione excel in winform
- 21. Problema di caricamento dell'host dell'elemento con winform
- 22. Calcola # di Anni Vivi in C# WinForm
- 23. Come estendere il metodo Dispose di WinForm?
- 24. Come spostare una finestra di dialogo Winform
- 25. C# Winform: visualizzazione efficiente di molti controlli
- 26. distribuzione di un'applicazione winform con sqlite incorporato
- 27. apertura della finestra di controllo utente WPF winform restringe finestra padre winform
- 28. Come ottenere un contesto di sincronizzazione WinForm o un programma su un thread WinForm
- 29. Implementazione MVVM per l'applicazione WinForm
- 30. Ordine layer componenti WinForm UI
Considera di creare un'altra domanda per la tua seconda domanda sulle scorciatoie – emartel
Ho fatto anche questo, e ho trovato tutto su google. Alcune proprietà che devi impostare su false, alcune che devi sostituire. – Pavenhimself