2014-12-15 3 views
5

Così creo un layout di modulo e provo a impostare un MinimumSize su di esso solo per scoprire che WinForms ha un adattamento! Così qui è quello che sembra quando inizio con proprietà MinimumSize impostata solo per la larghezza ...Layout Modifiche modulo progettazione Visual Studio in fase di riapertura a causa di MinimumSize

enter image description here

Come si può vedere sembra grande, senza spazi in più, la forma è la dimensione che voglio ecc ... Poi, provo a chiudere il modulo e aprirlo di nuovo, ho una piccola stranezza (l'altezza MinimumSize è stata impostata su 0 e ora WinForms ne ha fatti 38) ma qualunque cosa funzioni ancora come previsto ...

enter image description here

OK bene che strano "38" sul MinimumSize-Heig ht è strano, ma qualunque sia, fammi provare a impostare il mio preferito MinimumSize-Height a 420 (stesse dimensioni del modulo).

enter image description here

Salva, Chiudi Modulo di progettista e riaprire ... WTF? Tutto è andato storto! I miei tre pulsanti in basso sono stati tutti spinti verso l'alto, così come la casella di testo e il controllo ad albero che ho sopra, così come l'altezza di listview sinistra è stata ridimensionata. In effetti, guardandolo sembra che i controlli abbiano ancora tutte le dimensioni corrette. La variabile che è cambiata è la dimensione del modulo. È andato in qualche modo da 420 a 442 ???

enter image description here

Qualcuno ha qualche idea del perché questo continua a successo? Cosa posso fare per risolverlo o immagino di aggirarlo? Si prega di tenere presente che ho i pulsanti e la casella di testo ancorata in fondo. Il treeview deve rimanere ancorato alla cima e crescere con il ridimensionamento della finestra.

Grazie!

+0

Scusa, ho pensato che sarebbe stato più chiaro. Tutto va bene fino a quando non ho impostato una dimensione minima. Quindi non dovrebbe esserci nulla per quanto riguarda il codice. Inoltre, questo è un modulo completamente vuoto con oggetti aggiunti al modulo. Nessun codice al di fuori del codice del designer standard. Ma ho notato qualcosa ... Non succede quando aggiungo il ControlBox. Ciò succede solo quando ControlBox = False. Ma ancora alla ricerca di un lavoro in giro. –

risposta

5

Questo è un bug progettista, naturalmente. È indotto da una funzionalità di Winforms che è generalmente un trouble-maker per il progettista, ma non memorizza mai la proprietà Size. Qualcosa che puoi vedere nel codice generato automaticamente nel file Designer.cs del modulo. Invece, memorizza il ClientSize e calcola il valore in base a quel valore. Una caratteristica molto necessaria, l'altezza della barra del titolo è imprevedibile, dipende dalla configurazione dell'utente.

Ciò che fa scattare il bug nel tuo caso è l'impostazione della proprietà ControlBox su False. Ciò disabilita anche l'icona e aumenta il calcolo della dimensione esterna. Qualcosa che ha a che fare con l'ordine in cui vengono assegnate le proprietà, penso, la classe Form dovrebbe implementare ISupportInitialize ma non lo è. Il valore 38 per MinimumSize.Height è un effetto collaterale, ovvero l'altezza della barra dei sottotitoli sulla macchina. Non puoi rendere la finestra più piccola di quella. Un vincolo che viene applicato anche in fase di progettazione, un'altra stranezza.

La soluzione è semplice. Imposta la proprietà ControlBox su True e imposta il suo valore nel tuo costruttore Form:

public Form1() { 
     InitializeComponent(); 
     this.ControlBox = false; 
    } 
+0

LOL, grazie! spiegazione perfetta. E subito dopo ho capito cosa stava causando il problema !! :) –