per ridimenzionare un controllo ( e sui filgi) del 75 % , quali parametri devo passare a questo metodo?
sizeF non mi è chiaro...codice:me.scale(sizeF)![]()
per ridimenzionare un controllo ( e sui filgi) del 75 % , quali parametri devo passare a questo metodo?
sizeF non mi è chiaro...codice:me.scale(sizeF)![]()
Michele
Il metodo che hai indicato tu è obsoleto, MSDN consiglia questo che permette di specificare la scala in maniera distinta per la larghezza e l'altezza:
Il valore numerico da passare è il coefficiente che .net utilizza per calcolare la nuova larghezza/altezza del form e dei suoi controlli. Nell'esempio che ti ho riportato, la misura del form dopo la chiamata del metodo sarà Me.Width = Me.Width * 1.1. Ovviamente, passando un valore compreso tra 0 e 1 le misure diminuiranno.codice:Me.Scale(New SizeF(1.1, 1.1))
Chi non cerca trova.
non capivo cosa fossero quei parametro , adesso mi è chiaroOriginariamente inviato da tas
Il metodo che hai indicato tu è obsoleto, MSDN consiglia questo che permette di specificare la scala in maniera distinta per la larghezza e l'altezza:
Il valore numerico da passare è il coefficiente che .net utilizza per calcolare la nuova larghezza/altezza del form e dei suoi controlli. Nell'esempio che ti ho riportato, la misura del form dopo la chiamata del metodo sarà Me.Width = Me.Width * 1.1. Ovviamente, passando un valore compreso tra 0 e 1 le misure diminuiranno.codice:Me.Scale(New SizeF(1.1, 1.1))grazie ancora
![]()
Michele
un'altra cosa: esisiste una proprietà che restituisce il fattore (o percentuale) di scala attuale rispetto alle dimenzioni originali dei controlli/o?
mi spiego:
ho pensato di inserire due bottoni (in comune, per qualsiasi Tabs, non mi dilungo in questo.. ) con rispettivo nome: zoom_in e zoom_out che chiamano lo stesso Handle per l'evento click, differenziando la chiamata con il controllo di Sender.name se continete out =rimpicciolisce, altrimenti ingrandisce.. il fattore di scala l'ho fissato (per il momento..poi sarà settato dal menù) a 0.4 e viene calcolato = 1 + o - 0.4 asseconda se deve rimpicciolire o ingrandire..
l'iterazione va cercare, nella tabs attiva, il pannello contenente le tablelayoutpanel e quindi mi ridimenziona tutte le tablelayoutpanel contenute nel pannello di quella pagina:
***l'ho reso unico e valido per tutte le tabs presenti che vengono crate dinamicamnte e per evitare di scrivere codice ripetitivo..(il codice ripetitivo non mi piace e diventa una seccatura per le future manutenzioni o upgrade)
detto questo, ecco la procedura:ora, dovrei inserire una label per far comparire la percentuale di zoom attuale, ed è proprio questo che non riesco fare.. come reperire tale rapporto di zoom? ..senza fare calcoli particolari o tenere traccia delle varie chiamate...!?codice:Private Sub Zoom_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Zoom_out.Click, Zoom_in.Click Dim F As Single = 0.4, M As Single = 1 + IIf(sender.name.Contains("out"), -F, F) For Each Ctrl As Control In Tab.SelectedTab.Controls If Ctrl.GetType.Name = "Panel" Then For Each Ctrl2 As Control In Ctrl.Controls If Ctrl2.GetType.Name = "TableLayoutPanel" Then Ctrl2.Scale(New SizeF(M, M)) End If Next End If Next End Sub
Michele
Il metodo Scale non applica una sorta di zoom ai controlli ma ne modifica effettivamente le dimensioni. Non ho trovato nessuna proprietà in grado di restituire il fattore di scala, ti conviene memorizzare le dimensioni iniziali del form e determinare lo zoom corrente facendo il rapporto tra le dimensioni attuali e quelle originali.
Chi non cerca trova.
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 :
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..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
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)
Michele