Fissare la distanza di un Controllo grafico in modo costante rispetto ai bordi del Form durante il ridimensionamento di questo

Da Gambas-it.org - Wikipedia.

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