[c#] Ridimensionamento automatico delle etichette in base al contenuto...

mercoledì 13 gennaio 2010 - 15.44

Pokino Profilo | Junior Member

Salve, ho un problema di questo genere: uso una winform di avviso costituita da una label dove inserisco un messaggio variabile e sotto un hiperlink che mi chiude la finestra di avviso stessa e compie una operazione sulla form chiamante. Vorrei fare in modo che se il messaggio contenesse più righe (con dei newline) fosse visualizzato sempre nella label la quale dovrebbe ovviamente aumentare in altezza e con essa il resto della form.
Ho provato a cercare su msdn trovando solo la proprietà AutoSize che però lavora sulla larghezza. Non si può fare niente per l'altezza?

Grazie

AntCiar Profilo | Expert

Ciao.

Puoi risolvere in questo modo:

Inserisci nella form una TextBox com proprietà "Multiline" a true. Dai una dimensione fissa e imposta anche la proprietà "SrollBars" su "Both" o su "Vertical". IN questo modo se il tuo testo eccede le dimensioni della textBox verranno visualizzate le barre di scorrimento.

Ciao
Cristian Barca

Pokino Profilo | Junior Member

grazie, questo modo di procedere l'ho già usato in un'altra form per non arenarmi troppo, tuttavia vorrei proprio trovare una soluzione che non necessiti di una textbox..

tonyexpo Profilo | Senior Member

Ciao

una label di default in WinForms è già autosize=true quindi se fai Label1.Text="Ciao\n\rIo mi chiamo \n\rAntonio!" questo già va a capo automaticamente in in C#, in VB invece, devi scrivere Label1.Text="Ciao" & vbNewLine & "Io mi chiamo...."






Antonio Esposito
MCTS, MCP

http://blogs.dotnethell.it/espositos

Pokino Profilo | Junior Member

vero, anche se il comportamento vale solo con i newline e non se il testo è più lungo dello spazio di una riga, in quel caso si arriva al limite destro della form in malo modo, cmq a me x ora basta andare a capo usando i new line..

il problema è soprattutto questo, forse non mi sono spiegato bene:
poichè sotto alla label ho un hiperlink e la form è dimensionata in design per 1 riga di label e 1 riga di hiperlink, al crescere del numero di righe la label si sovrappone all'hiperlink e poi raggiunge il bottom della form, io vorrei invece che tutta la sezione sottostante la label si mantenesse pulita e la form crescesse di conseguenza in altezza

tonyexpo Profilo | Senior Member

OK adeso ho capito:

ti spiego la soluzione che ho trovato:

fai un form, togli il minimizebutton e il maximizebutton, metti FormBorderStyle=fixedsingle
adesso è uguale ad un msgbox

poi al suo interno ci metti un table layout panel e lo imposti con una sola colonna, e all'interno delle righe (ne devi aggiungere una visto che di default te ne mette 2) aggiungi in alto una label, poi una linklabel o quello che ti server e infine un button. al button imposti anchor = (bottom e right) così si autoallinea all'angolo destro

al layoutpanel imposti l'anchor su (top,bottom,right e left) in pratica fa il resize, e imposti AutoSize=true

poi vai nel codice e crei l'evento TableLayoutPanel_Resize
qui fai me(o this).Height = TableLayoutPanel1.Height + 50
qui fai me(o this).Width = TableLayoutPanel1.Width + 30


così avrai una message box che fa il resize senza accavallare i controlli sia in orizzontale che in verticale

ti consiglio infine di impostare al (o ai) button la proprietà DialogResult, così senza scrivere codice, la pressione di quel pulsante già rappresenterà quel risultato modale, quindi quando chiamerai la form
dim m = new myBox(<argomenti>)
if m.ShowDialog()=DialogResult.OK....

ciao

Antonio Esposito
MCTS, MCP

http://blogs.dotnethell.it/espositos

Pokino Profilo | Junior Member

questo discorso del tableLayoutPanel è interessante, non lo conoscevo, però la cosa non mi sembra funzionare..

allego un progetto di test per vedere se sto sbagliando qualcosa, grazie

ps: ho lasciato stare il discorso dialog e pulanti perchè non mi è necessario

tonyexpo Profilo | Senior Member


ad occhio (visto che ho solo il notepad su questa macchina) credo tu non abbia impostato il size automatico sulle righe.. fai click destro sul controllo e poi EditRowsAndColumn.... li seleziona le rows e imposta autosize alla riga della label.....

tienimi aggiornato
ciao

Antonio Esposito
MCTS, MCP

http://blogs.dotnethell.it/espositos

Pokino Profilo | Junior Member

dopo un po' di smanetto sembra funzionare.. era un problema di calcolo corretto del delta, riposto il file di esempio.. se hai ulteriori suggerimenti..

tonyexpo Profilo | Senior Member

Mi fa piacere che hai trovato una configurazione appagante ;)

Ho visto che hai disabilitato il resize del form, ma ti consiglio di disabilitare anche minimize e maximize button

ciao, alla prossima

Antonio Esposito
MCTS, MCP

http://blogs.dotnethell.it/espositos
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5