Re: Saving Colors to a db
Dean Cleaver <[email protected]>
| Newsgroups | gmane.comp.windows.devel.dotnet.winforms |
|---|---|
| Message-ID | <4543A775711185429E59B18055D416742319FE@sxslakl004.xceptionsoftware.com> |
Looking through my code, I set the name into the business layer:
this.dataItem.BannerBackground = colorDialog.Color.Name;
I'm presuming this name is either "White" or "FF23DC" etc. When I write
to the data access layer I simply store that name:
base.bannerBackground = value;
So that side's pretty easy. Reading it out, I have some changes.
"base.BannerBackground" is the string as read from the db:
if (Color.FromName(base.BannerBackground.Trim()).IsKnownColor)
return base.BannerBackground.Trim(); else {
if (base.BannerBackground.Length > 6)
return
base.BannerBackground.Substring(base.BannerBackground.Length - 6, 6);
return base.BannerBackground;
}
Basically, if it's a known colour, return that name, otherwise return
the 6 char RGB hex. Then, on the business side I return just that value:
return this.programUserTypeData.BannerBackground;
And in the UI, I use another function:
colorDialog.Color = ColorFromString(this.dataItem.BannerBackground);
Here's the ColorFromString function:
public static System.Drawing.Color ColorFromString(string color)
{
if (Color.FromName(color.Trim()).IsKnownColor)
return Color.FromName(color.Trim());
else
{
if (color.Length == 6)
return Color.FromArgb(int.Parse(color.Substring(0, 2),
NumberStyles.HexNumber),
int.Parse(color.Substring(2, 2),
NumberStyles.HexNumber),
int.Parse(color.Substring(4, 2),
NumberStyles.HexNumber));
else if(color.Length == 8)
return Color.FromArgb(int.Parse(color.Substring(0, 2),
NumberStyles.HexNumber),
int.Parse(color.Substring(2, 2),
NumberStyles.HexNumber),
int.Parse(color.Substring(4, 2),
NumberStyles.HexNumber),
int.Parse(color.Substring(6, 2),
NumberStyles.HexNumber));
else
throw new ApplicationException("Invalid Color String :" +
color);
}
}
HTH
Dino
-----Original Message-----
From: Discussion forum for developers using Windows Forms to build apps
and controls [mailto:[email protected]] On Behalf Of
Dean Cleaver
Sent: Wednesday, 4 July 2007 08:32
To: [email protected]
Subject: Re: [DOTNET-WINFORMS] Saving Colors to a db
Peter,
I've been doing this for about 6 years, so I'm confident I have the code
that works - somewhere. Let me did around for you - but basically, the
essential bits are to check the incoming string for Color.KnownColor -
i.e. is it "White" or "Red" etc. If that's not the case, check if it's 6
or 8 characters - ARGB hex or RGB hex - it changed at one point I think.
I'll post the sample code once I get a chance to look right through the
layers and see what I do with colour properties.
Dino
-----Original Message-----
From: Discussion forum for developers using Windows Forms to build apps
and controls [mailto:[email protected]] On Behalf Of
Peter Osucha
Sent: Tuesday, 3 July 2007 07:35
To: [email protected]
Subject: [DOTNET-WINFORMS] Saving Colors to a db
Hi,
I am saving Color values to a database as integers after converting the
color using the ToArgb() method. When I retrieve the color, I am
resetting it using the FromArgb() method. However, this doesn't
preserve the color name if the color has a name - as shown in this
simple test proc.
private void Button3_Click ( object sender, EventArgs e )
{
Color col1 = Color.DarkBlue;
int col1int = col1.ToArgb ( );
Color col2 = Color.FromArgb ( col1int );
Console.WriteLine ( "{0}, {1}", col1, col2 );
}
If I desire to save and retrieve Colors to a database and to preserve
the color name if it exists, I imagine I need to save a string of the
name instead of the argb value?
Peter