DOBON.NET DOBON.NETプログラミング掲示板過去ログ

文字列からColorの変換について

環境/言語:[環境(Windows 7 )、使用言語(VB.NET)]
分類:[.NET]

こんにちは

質問させて下さい。

以下のサイトから、ハッシュテーブルをシリアライズ化して保存しようと思います。
http://dobon.net/vb/dotnet/file/xmlserializerhashtable.html

ハッシュテーブルでキーを"1"、値をTextBox2.BackColorにすると、ColorからStringに変換できませんとエラーが出るので、ハッシュテーブルに追加する前に、Convert.ToStringでColorからStringに変換してから追加すると無事に保存出来ました。


逆に復元もしたいのですが、StringからColorに変換する場合はどうしたらいいでしょうか?

Convert.ToStringみたいに簡単に出来ますでしょうか?
2012/03/21(Wed) 04:16:59 編集(投稿者)

■No30119に返信(ザナドゥさんの記事)
> 逆に復元もしたいのですが、StringからColorに変換する場合はどうしたらいいでしょうか?

ColorConverter クラスを試してみてください。

システムカラー、RGB指定、色名指定のいずれにおいても、
String と Color の間での総合変換ができます。
魔界の亀面弁士さん、返信有難う御座います。



以下のようにしてみました。



'TextBox2.BackColorの色を、ハッシュテーブル(Serial_Obj)登録
'キーはLabel.Text

Dim str1 As String = Convert.ToString(TextBox2.BackColor)
Form1.Serial_Obj.Add(Label.Text, str1)





'DataGridView1のBackColorの色を変更

If Serial_Obj.ContainsKey(UserID) Then

Dim str As System.Drawing.Color = New ColorConverter().ConvertFromString(Serial_Obj(UserID))

Dim saigo As Integer = DataGridView1.Rows.Count - 1
DataGridView1.Rows(saigo).DefaultCellStyle.BackColor = str

End If

'Color [A=255 は Int32 の有効な値ではありません。
と、エラーが出ます。




If Serial_Obj.ContainsKey(UserID) Then

Dim str As System.Drawing.Color = Color.FromName(Serial_Obj(UserID))

Dim saigo As Integer = DataGridView1.Rows.Count - 1
DataGridView1.Rows(saigo).DefaultCellStyle.BackColor = str

End If

これだとエラーは出ませんが、BackColorが全て黒色になってしまいます。




プログラムを閉じたら、ハッシュテーブルにはこんな感じで登録されていました。
<Entry key="name1">Color [A=255, R=128, G=255, B=255]</Entry>
<Entry key="name2">Color [Red]</Entry>





上手く出来ないのは、どこが原因でしょうか?






■No30120に返信(魔界の亀面弁士さんの記事)
> ■No30119に返信(ザナドゥさんの記事)
>>逆に復元もしたいのですが、StringからColorに変換する場合はどうしたらいいでしょうか?
>
> ColorConverter クラスを試してみてください。
>
> システムカラー、RGB指定、色名指定のいずれにおいても、
> String と Color の間での総合変換ができます。
■No30124に返信(ザナドゥさんの記事)
> > ColorConverter クラスを試してみてください。
> Dim str1 As String = Convert.ToString(TextBox2.BackColor)

Convert ではなく、ColorConverter を試してみてください。
魔界の仮面弁士さん、返信有難う御座います。

ハッシュテーブルにいる時点で間違っているということでしょうか?
以下を試してみたのですが、エラーが出てしまいました。


Dim str1 As String = New ColorConverter().ConvertFromString(TextBox2.BackColor)

型System.Drawing.Colorの値をStturingに変換できません



ColorConverterを調べるため、以下を見てみたのですがいまいち使い方が理解できませんでした。
http://msdn.microsoft.com/ja-jp/library/system.drawing.colorconverter%28v=vs.80%29.aspx



またアドバイスいただけないでしょうか?





■No30125に返信(魔界の仮面弁士さんの記事)
> ■No30124に返信(ザナドゥさんの記事)
>>> ColorConverter クラスを試してみてください。
>>Dim str1 As String = Convert.ToString(TextBox2.BackColor)
>
> Convert ではなく、ColorConverter を試してみてください。
こういうことでは?

        Dim ColName = New ColorConverter().ConvertToString(Button1.BackColor)
        Dim ColRest = New ColorConverter().ConvertFromString(ColName)
shuさん、有難うございます。

教えて頂いたコードで出来ました。
助かりました。



■No30127に返信(shuさんの記事)
> こういうことでは?
>
> Dim ColName = New ColorConverter().ConvertToString(Button1.BackColor)
> Dim ColRest = New ColorConverter().ConvertFromString(ColName)
>
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板