Autosize di una label

martedì 20 dicembre 2005 - 09.42

eddyG Profilo | Junior Member

Ciao a tutti!

Io avrei la necessità di dover visualizzare sul mio formdelle label le quali si adeguano automaticamente al testo che viene visualizzato al loro interno.
Qualcuno sa indicarmi come posso procedere per risolvere questo problema...?

Grazie

totti240282 Profilo | Guru

con la proprietà autosize.

C'è solo un capitano !!!!!!

eddyG Profilo | Junior Member

Grazie

ho fatto questa domanda,che sono riuscito a risolvere grazie al tuo aiuto,perchè mi è stato consegnato un programma (non ancora ultimato) che permette di avere la possibilità di cambiare lingua di visualizzazione del form.

Io ti chiedevo questo,se era possibile aiutarmi:

Per ora il progetto contiene una label,un bottone e un textbox che cambiano testo a seconda di che lingua è stata prescelta ed ora devo ampliare questa form con altri controlli per poterla utilizzare in tanti altri progetti che verranno sviluppati in futuro.

Io ho già aggiunto un'altra label ma questa,non cambia come le altre...come mai?

totti240282 Profilo | Guru

hai controllato come viene gestita la prima label ??? sicuramnete cambierà qualcosa in base alla lingua scelta presumo.

C'è solo un capitano !!!!!!

eddyG Profilo | Junior Member

la form contiene,al suo interno:
-una label(con la proprietà autosize impostata a TRUE);
-un bottone che,all'avvio del programma visualizza come testo la scritta ("Cambia lingua") che poi,cambia ogni volta che si clicka questo pulsante;
-un textbox che permette all'untente di inserire le due lettere della lingua con la quale vuole visualizzare la nuova form.

le uniche due istruzioni che sono presenti nel codice sono:

'Impostare CurrentUICulture sulla lingua specificata nella casella di testo CultureEdit.
Thread.CurrentThread.CurrentUICulture = New CultureInfo(txtCultureEdit.Text, False)

'Se la lingua specificata non è valida, si passa alle risorse di fallback. Thread.CurrentThread.CurrentUICulture = New CultureInfo("", False)


totti240282 Profilo | Guru

ok questo

Thread.CurrentThread.CurrentUICulture = New CultureInfo(txtCultureEdit.Text, False)

serve ad impostare la lingua impostata dentro la textbox,quindi il tuo problema è che non cambia la lingua degli altri controlli ???

C'è solo un capitano !!!!!!

eddyG Profilo | Junior Member

all'interno del textbox inserisco una tra queste sigle:en,en-US,it,de,fr,es...
cosi facendo scelgo la lingua con la quale voglio che venga visualizzata la form.

Il bottone cambia lingua perchè se passo da italiano ad inglese,la scritta presente sul bottone cambia,in modo corretto,da "Cambia lingua" a " Switch Language".

Il componente che non cambia la lingua è un'altra label che ho inserito io,con la quale visualizzo una stringa di saluto

schifidus Profilo | Junior Member

Ciao,il problema è leggermente più complesso di come l'hai descritto.
Allora in .NET 2003, hai la possibilità di aggiungere dei file di risorsa .resx (formattati XML) che contengono una corrispondenza chiave - valore (un pò come degli hashtables).
Dal progetto esegui quanto segue :
-aggiungi nuovo elemento e scegli file di risorse Assembly.
-a questo punto chiamalo language.resx
- in questo file aggiungi i tuoi valori per ogni chiave nella lingua di default della tua applicazione,(ad esempio chiave Labe1--> ciao)
- Ora crei un ulteriore file di risorsa , ma lo chiami language.fr-FR.resx e come chiave valore metti Label1--> bonjour .
-nei campi privati della tua applicazione definisci quanto segue che ti serve per gestire le risorse in funzione della culture del thread.
private ResourceManager m_ResourceManager = new ResourceManager("namespaceTuoApplicativo.LocalizationSample",
System.Reflection.Assembly.GetExecutingAssembly());
private CultureInfo m_EnglishCulture = new CultureInfo("it-IT");
private CultureInfo m_FrenchCulture = new CultureInfo("fr-FR");

Ora ti crei un metodo private void UpdateUI()
{
label1.Text = m_ResourceManager.GetString("Label1");
}
questo metodo lo richiami dopo InitializeComponent() del costruttore della tua form.

Ricapitolando cosa abbiamo fatto:
1)Abbiamo creato un dei file di risorsa per gestire l'internazionalizzazione con delle associazioni chiave valore.
2)Abbiamo usato la classe resourceMAnager per accedere a Runtime alle risorse.
3)Abbiamo definito le culture supportate
4)Alla proprietà text di una nostra Label non abbiamo associato una stirnga, bensì il valore associato a una chiave contenuta nel file di risorsa.
5) Abbiamo richiamato il metodo incaricato di associare il valore definito per la chiave specificata alla proprietà text della nostra label. (Lo abbiamo richiamato quando vengono inizializzati i controlli della Form.).

Ora possiamo fare un passo ulteriore a runtime la lingua del thread e di conseguenza la proprietà text della nostra Label

Queste istruzioni vanno inserire nell handler dell evento onClick del tuo bottone.
Thread.CurrentThread.CurrentUICulture = m_FrenchCulture;
UpdateUI();

NAturalmente tu puoi personalizzarlo passando al costruttore della classe CultureInfo il contenuto della tua textBox in cui l'utente seleziona la lingua.
Io ti consiglio di gestire con una ComboBox la scelta della lingua per i seguenti motivi:

1) Non permetti all'utente di generare eccezzioni inserendo del testo errato.
2) Puoi controllare a priori tutte le lingue supportate dall'internazionalizzazione della tua applicazione.

p.s. cerca sempre di aiutare l'utente finale a NON poter commettere errori.

Spero di aver risposto ai tuoi dubbi.
Ciao Marco.






eddyG Profilo | Junior Member

Nel mio progetto sono già inclusi i vari file di risorse con le diverse lingue con le quali voglio far visualizzare la form.

Io ho provato ad aggiungere,all'interno di suddetti file,il codice associato ai nuovi controlli per poterne modificare la lingua.

<data name="label1.text">
<value>&amp;Buongiorno</value>
</data>

all'interno del file di risorse originale.

<data name="label1.text">
<value>&amp;Buonjour</value>
</data>

all'interno del file di risorse in lingua francese.

ma ancora non funziona



schifidus Profilo | Junior Member

Perchè devi aggiungere il codice che assegna l'etichetta alla proprietà del tuo nuovo controllo , come ti ho scritto sotto.
Ciao Marco.

eddyG Profilo | Junior Member

private ResourceManager m_ResourceManager = new ResourceManager
("namespaceTuoApplicativo.LocalizationSample",
System.Reflection.Assembly.GetExecutingAssembly());
private CultureInfo m_EnglishCulture = new CultureInfo("it-IT");
private CultureInfo m_FrenchCulture = new CultureInfo("fr-FR");

queste istruzioni equivalgono a scrivere

Dim m_ResourceManager = New System.Resources.ResourceManager("namespaceTuoApplicativo.LocalizationSample", System.Reflection.Assembly.GetExecutingAssembly())
Dim m_EnglishCulture = New CultureInfo("it-IT")
Dim m_FrenchCulture = New CultureInfo("fr-FR") ?????????????????


queste altre istruzioni come si possono convertire in VB.NET?

Ora ti crei un metodo private void UpdateUI()
{
label1.Text = m_ResourceManager.GetString("Label1");
}


eddyG Profilo | Junior Member

Perchè nell'evento click del bottone (alla variabile "m-FrenchCulture") e nel metodo privato (alla variabile "m_ResourceManager") mi vengono segnalati errori di "NON dichiarato" quando allinterno del " Codice generato da Progettazione Windows Form " ho fatto tutte le dichiarazioni che servono?

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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5