Serialize Button Color

giovedì 12 febbraio 2009 - 10.26

toniovigi Profilo | Expert

Ciao ragazzi, riprendo un argomento gia trattato su un thread vecchio che non riesco a trovare,
praticamente la classe button nn essendo serializzabile, uno di voi mi aveva creato una Struttura per racchiudere le proprietà del bottone che voglio
salvare in modo tale da poter serializzare , la struttura e la seguente

/// <summary>
/// Questa struttura viene usata per racchiudere le proprietà del bottone che vuoi salvare
/// </summary>
[Serializable()]
public struct ButtonInfo
{
/// <summary>
/// Crea una struttura ButtonInfo a partire da un bottone, copiando le proprietà rilevanti
/// </summary>
public ButtonInfo(Button from)
{

this.Name = from.Name;
this.Text = from.Text;
this.Bounds = from.Bounds;
//Assegna le altre proprietà che intendi salvare

}

/// <summary>
/// Conversione implicita da Button a ButtonInfo
/// </summary>
/// <remarks>Serve per poter scrivere buttonInfo = button;</remarks>
public static implicit operator ButtonInfo(Button from)
{
return new ButtonInfo(from);
}

/// <summary>
/// Conversione implicita da ButtonInfo a Button
/// </summary>
/// <remarks>Serve per poter scrivere button = buttonInfo;</remarks>
public static implicit operator Button(ButtonInfo from)
{
Button b = new Button();
b.Name = from.Name;
b.Text = from.Text;
b.Bounds = from.Bounds;


//Assegna le altre proprietà che intendi salvare

return b;
}

//Nome del Button
public string Name;
//Testo del button
public string Text;
//Posizione e dimensioni del Button
public Rectangle Bounds;
//Aggiungi altre proprietà da serializzare

}
Premetto che ho anche le funzioni serializza e deserializza adattate alla classe che funzionano perfettamente;

Ora mi è era stato detto che io potevo aggiungere eventualmente altre proprietà da serializzare e ho provato ad aggiungere gli attributi per il colore
quindi creare public Color colorebottone e aggiungendo i vari oggetti nelle funzioni dello struct,ma nn funziona,

ho anche guardato il file XML creato dalla serializzazione e noto una cosa strana

<ButtonInfo>
<Name />
<Text> </Text>
<Bounds>
<Location>
<X>45</X>
<Y>180</Y>
</Location>
<Size>
<Width>66</Width>
<Height>50</Height>
</Size>
<X>45</X>
<Y>180</Y>
<Width>66</Width>
<Height>50</Height>
</Bounds>
<colore />
</ButtonInfo>
cè quel tag colore che non contiene informazioni ed e strano

MI potete dare una manO???

Grazie Antonio

aiedail92 Profilo | Expert

Ciao

La struttura Color è serializzabile, ma per quello che ho capito, la serializzazione XML non funziona con essa perchè le sue proprietà sono tutte readonly.

Quindi quello che ti consiglio di fare è, invece che salvare il colore come struttura Color, di salvare solo il suo valore ARGB (Alpha, Red, Green, Blue) che è un int e quindi è serializzabile.

Ecco come viene fuori la struttura che ti avevo proposto la volta scorsa:

/// <summary> /// Questa struttura viene usata per racchiudere le proprietà del bottone che vuoi salvare /// </summary> [Serializable()] public struct ButtonInfo { /// <summary> /// Crea una struttura ButtonInfo a partire da un bottone, copiando le proprietà rilevanti /// </summary> public ButtonInfo(Button from) { this.Name = from.Name; this.Text = from.Text; this.Bounds = from.Bounds; this.BackColor = from.BackColor.ToArgb(); this.ForeColor = from.ForeColor.ToArgb(); //Assegna le altre proprietà che intendi salvare } /// <summary> /// Conversione implicita da Button a ButtonInfo /// </summary> /// <remarks>Serve per poter scrivere buttonInfo = button;</remarks> public static implicit operator ButtonInfo(Button from) { return new ButtonInfo(from); } /// <summary> /// Conversione implicita da ButtonInfo a Button /// </summary> /// <remarks>Serve per poter scrivere button = buttonInfo;</remarks> public static implicit operator Button(ButtonInfo from) { Button b = new Button(); b.Name = from.Name; b.Text = from.Text; b.Bounds = from.Bounds; b.BackColor = Color.FromArgb(from.BackColor); b.ForeColor = Color.FromArgb(from.ForeColor); //Assegna le altre proprietà che intendi salvare return b; } //Nome del Button public string Name; //Testo del button public string Text; //Posizione e dimensioni del Button public Rectangle Bounds; //Colore di sfondo public int BackColor; //Colore del testo public int ForeColor; //Altre proprietà }

Luca
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