Domanda

Ho un modulo che è un mdicontainer e ha una striscia di menu in alto. Aggiungo un modulo figlio al mio contenitore mdi e quando ingrandisco il bambino si ingrandisce sopra la barra dei menu. Voglio sapere come limitare il bambino a massimizzare al di sotto della menustrip. Qualsiasi aiuto sarebbe apprezzato.

È stato utile?

Soluzione

La tua forma figlio viene massimizzata nel modo in cui le forme figlio dovrebbero essere massimizzate in MDI. In realtà non copre la striscia di menu del modulo principale, ma sta fondendo la propria striscia di menu con quella del modulo principale.

Per fare in modo che il modulo figlio occupi solo l'area figlio disponibile nel padre MDI (e non unire il suo menu con il menu padre), inserisci qualcosa come questo codice nell'evento Ridimensiona del modulo figlio:

if (this.WindowState == FormWindowState.Maximized)
{
    this.WindowState = FormWindowState.Normal;
    this.Size = this.MdiParent.ClientSize;
    this.Location = new Point(0, 0);
}

che impedirà che la finestra figlio venga effettivamente ingrandita.

Dico "qualcosa come questo codice" perché questo frammento non funziona esattamente bene. La proprietà ClientSize del modulo principale fornisce le dimensioni complessive del modulo, mentre si desidera utilizzare solo le dimensioni dell'area client MDI. Non so come ottenerlo, e apparentemente non è semplicissimo. Vedi questa domanda:

Dimensioni / posizione dell'area client MDI di Winforms

Altri suggerimenti

È possibile impostare la proprietà MaximumSize in modo che non riempia l'intero contenitore.

Conosco una vecchia domanda, ma mi sono appena imbattuto in un vecchio progetto a cui sto lavorando, quindi ecco una risposta per chiunque la veda. L'impostazione del Dock su DockStyle.Fill ti darà il comportamento che desideri.

Basta essere consapevoli del fatto che la finestra funzionerà / sembrerà strana se provi a riposizionare o ridimensionare la finestra mentre ha quel DockStyle.

A tale scopo, mi sono iscritto all'evento di ridimensionamento della finestra del client MDI e se la finestra era stata appena ingrandita, ho impostato DockStyle su Fill, impostato FormBorderStlye su FixedDialog (per evitare il ridimensionamento) e impostato lo stato della finestra su normale per evitare che si verifichi la massimizzazione.

Per impedire all'utente di spostare la finestra mentre si trova in questo stato "ottimizzato" Ho semplicemente scavalcato il metodo WndProc e gestito durante lo spostamento della finestra (SC_MOVE) e ho inserito un ritorno per impedire che l'azione abbia effetto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top