Fissare la distanza di un Controllo grafico in modo costante rispetto ai bordi del Form durante il ridimensionamento di questo
Per mantenere la distanza costante di un Controllo grafico rispetto ad uno o più bordi di un Contenitore - come ad esempio un Form - durante il ridimensionamento manuale di quest'ultimo con il mouse o da codice, bisogna utilizzare l'Evento "_Resize()" della Classe di appartenenza del Contenitore.
Riguardo al tipo di distanza costante, tenuta dall'Oggetto durante il ridimensionamento del Form Contenitore, possiamo considerare almeno tre casi:
1°) "Distanza dinamica proporzionale rispetto alle coordinate X,Y" (ossia all'angolo superiore sinistro dell'oggetto).
La distanza conservata è riferita all'angolo superiore sinistro dell'Oggetto grafico, ed è proporzionale alla dimensione del Form nel suo modificarsi. Essa viene impostata semplicemente assegnando alle proprietà .X e .Y (o anche ad uno solo di esse) il prodotto della correlata dimensione (.ClientWidth [nota 1] con .X e .ClientHeight con .Y) del Form Contenitore e della distanza in percentuale che si vuole sempre tenere dal margine del Form.
2°) "Distanza dinamica proporzionale rispetto all'angolo superiore destro" dell'Oggetto grafico contenuto dal Form.
Sostanzialmente simile alla precedente, ma il punto di riferimento della distanza non è più l'angolo superiore sinistro (delle Proprietà .X e .Y dell'oggetto), bensì quello destro. Alla moltiplicazione già vista nel caso precedente va aggiunta la sottrazione della correlata dimensione (.Width con .X e .Height con .Y) dell'Oggetto.
3°) "Distanza dinamica assoluta", ossia la distanza fissa del lato destro dell'Oggetto grafico dal margine destro del Form Contenitore.
Essa viene impostata sommando la correlata dimensione (.Width con .X e .Height con .Y) dell'Oggetto alla distanza fissa che si vuole mantenere in ogni caso, meno la correlata dimensione del Form contenitore.
Esempio pratico (poniamo 3 Button sul Form):
Public Sub Form_Resize() ' Distanza dinamica proporzionale rispetto a X,Y (angolo superiore sinistro del "Button"): Button1.X = Me.ClientW * 0.3 Button1.Y = Me.ClientH * 0.2 ' Distanza dinamica proporzionale rispetto all'angolo supriore destro del "Button": Button2.X = (Me.ClientW * 0.8) - Button2.W Button2.Y = (Me.ClientH * 0.8) - Button2.H ' Distanza dinamica assoluta (distanza fissa del lato destro ed inferiore del "Button" rispettivamente dal margine destro ed inferiore del "Form"): Button3.X = Me.ClientW - (Button3.W + 20) Button3.Y = Me.ClientH - (Button3.H + 200) End
Note
[1] Sull'uso delle Proprietà ".ClientWidth" e ".ClientHeight" vedere la seguente pagina:
Referenziare in modo appropriato lo spazio all'interno di un Contenitore rispetto ai suoi Oggetti figli