Localizzazione di controlli: perdo lo sfondo

mercoledì 12 novembre 2008 - 15.30

stefanognss Profilo | Newbie

utilizzo VS2008 v 9.0.30729.1 SP inglese. Ho creato un controllo base con un'immagine di sfondo. Creo un controllo derivato, lo apro nel designer, e lo localizzo in una prima lingua; nel momento in cui ripristino la lingua di default (o cambio la lingua) perdo l'immagine di sfondo. Se controllo il codice nel designer del controllo derivato vedo cha ha aggiunto il codice this.BackgroundImage = null; questo codice viene aggiunto quando cambio la lingua del controllo o ripristino quella di default. La stessa cosa succede in C# e VB, sia che il controllo base sia localizzato a sua volta sia che non lo sia, sia che l'immagine di sfondo del controllo base sia caricata dalle risorse del progetto che da quelle locali del controllo. Penso sia un problema del designer di VS: qualcuno ha qualche informazioni a riguardo ?
grazie a tutti.

llamanna Profilo | Junior Member

Uso la stessa versione di visual studio ed eseguendo le tue stesse azioni ottengo lo stesso risultato. Perchè non assegni l'immagine di sfondo allo user control base nel costruttore dopo il metodo Initialize, o nell'evento load?


Laura.
http://lauralamanna.blogspot.com/

stefanognss Profilo | Newbie

In questo caso il comportamento è ancora più misterioso: inserisco il caricamento della immagine di sfondo nel costruttore del controllo base:
InitializeComponent();
this.BackgroundImage = Properties.Resources.ACBLUPRT;
Invalidate();
Creo il solito controllo derivato, lo localizzo e lo inserisco in una form. Succede che:
1-il controllo base nel designer NON mostra comunque l'immagine di sfondo
2-il controllo derivato inizialmente la mostra, ma dopo la localizzazione non la mostra più (e compare nel designer l'assegnazione a null come prima)
3-sia il controllo derivato, che il controllo base inseriti nella form mostrano correttamente l'immagine anche dopo la localizzazione della form
4-guardando il file di risorse della form sono presenti entramne le immagini dei due controlli, sia il base che il derivato. Questo signfica che l'immagine viene inserita nel file risorse della form per ogni controllo derivato presente.
Seguendo il codice succede che:
1-InitializeComponent della form
2-costruttore del controllo derivato
3- costruttore e InitializeComponent() del controllo base (che assegna l'immagine di sfondo al controllo derivato)
4 -InitializeComponent() del controllo derivato (che toglie l'immagine al controllo derivato prechè viene assegnata a null)
5-InitializeComponet() della form che contiene nel designer l'assegnazione dell'immagine di sfondo al controllo derivato recuperandola dal file risorse della form.

MI sembra un problema di VS (credo presente anche in 2005): sai dove si può segnalare?

llamanna Profilo | Junior Member

Il problema esposto nel tuo primo post è stato già segnalato qui

http://forums.microsoft.com/msdn/ShowPost.aspx?PostID=2471746&SiteID=1



Laura.
http://lauralamanna.blogspot.com/

stefanognss Profilo | Newbie

Grazie laura, ho letto
Mi sono collegato a Microsoft Connect e ho segnalato lì il problema che riguarda anche i font dei controlli, cioè se nel controllo base è inserito ad esempio una label e se ne cambia il font, durante il processo di localizzazione, se si cambia il testo della label, il controllo derivato perde il font del controllo base. A mio parere la responsabilità è del designer che "vedendo" una proprietà del controllo modificata (il testo) salva sulle risorse del controllo derivato tutte le proprietà assegnandone però (incomprensibilmente) i valori di default.
La mia soluzioe è:
-per controlli ai quali la localizzazione deve cambiare il testo non rendere il controllo visibile al controllo derivato ma inserire nel controllo base delle proprietà aggiuntive (ad esempio)
/// <summary>
/// proprietà che assegna il testo del pannello
/// </summary>
[Localizable(true), Category("Custom"), Description("Top panel text"), DefaultValue("Top Text")]
public string TopText
{
get { return lTop.Text; }
set
{
lTop.Text = value;
Invalidate();
}
}
-per l'immagine di sfondo inserire l'immagine nelle risorse del progetto e caricarla nel load del controllo base (esempio)
this.BackgroundImage = Properties.Resources.ACBLUPRT;
Invalidate();
in questo modo il controllo base NON mostra lo sfondo nel designer ma i controlli derivati sì anche dopo la localizzazione
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