era proprio quello che non volevo sentire
il metodo suggeritomi è il migliore e precisiso, però nel mio caso mi risulta complicato implementarlo in quanto gli oggetti da scalare sono tanti e vengono creati e cancellati dinamicamente, avrei dovuto tener conto anche di questo (per ciò mi sono dilungato nella spiegazione)...
di solito uso Il tag del controllo per memorizzare valori personali riferiti a tale controllo ( e in questo caso sarebbe stato utile al caso) ma putroppo l'ho già utilizzato per altre funzioni (ridimenzionamento e spostamento degli oggetti tramite mouse durante l'esecuzione
)
alla fine ho optato per un valore percentuale di zoom per ogni pagina distinta che viene memoriazzato del Tag del Pannello contenitore e ricalcolato a ogni "scale" effettuato agli oggetti contenuti ( a mo di percentuale). Così mi permette di ritrovarmi tale fattore anche per i controlli da creare nuovi..insomma mi permette di lavorare costantemente con quella percentuale di zoom impostata nella textbox Zoom_Percent.Text come valore corrente per la pagina attiva...ed è possibile anche settarlo a piacimento..
se può interessare e risulta comprensibile
, la procedura postata l'ho evoluta in questo modo :
codice:
Private Sub Zoom_Click(ByVal sender As System.Object, ByVal e As System.EventArgs, Optional ByVal Percent As String = Nothing) Handles Zoom_out.Click, Zoom_in.Click
Dim F As Single = 25 / 100, M As Single = 1 + IIf(sender.name.Contains("out"), -F, F)
Dim Aggiorna As Boolean = False
Do
For Each Ctrl As Control In GetControls(Tab.SelectedTab, "Panel")
If Not IsNothing(Percent) Then M = 1 + (Val(Percent) - Val(Ctrl.Tag)) / 100
For Each Ctrl2 As Control In GetControls(Ctrl, "TableLayoutPanel")
Ctrl2.Scale(New SizeF(M, M)) : Aggiorna = True
Next
If Aggiorna Then
Ctrl.Tag = Val(Ctrl.Tag) * M
Zoom_Percent.Text = Format(Val(Ctrl.Tag), "0.00 \%")
Aggiorna = False
End If
Next
If IsNothing(Percent) Then Exit Do
Loop Until Val(Percent) = Val(Zoom_Percent.Text)
End Sub
ho aggiunto un parametro optional che fornisce la percentuale (quando passato), e un cilclo che cicla fino a quando non raggiunge l'effettiva percentuale passatoli come argomento..
lo so è un po ostico ma che ci potevo fare!
quando dev'essere chiamata per settare una determinata percentuale (impostata nella TextBox con nome Zoom_percent, verrà chiamata così:
codice:
Call Zoom_Click(sender, e, Zoom_Percent.Text)