tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルBackColorの変換方法は
記事No4448
投稿日: 2006/10/25(Wed) 10:09
投稿者中高年ぼろブラマー
昨日に続いてまた投稿します。

やりたいこと
FormのメニューにあるLabel1をクリックすると、Label1のBackColorを変更し、
そのBackColorをiniファイルに書き込んで、登録した処理を実行します。

次にFormを起動したときは、iniファイルを読み込んでLabel1のBackColorを変更します。
このLabel1に標準以外の色が付いている場合処理が終わっていると言う意味です。

できないこと
当サイトの「INI ファイルへの書き込み及び読み込み」を参考にして、
書き込み
ret = WritePrivateProfileString("labelcolor", "LB1", Label1.backcolor.ToString, iniFileName)
読み込み
ret = GetPrivateProfileString("LabelColor", "LB1", "", strBuffer, strBuffer.Capacity, iniFileName)
GroupBox1.Controls("Label1" ).BackColor = strBuffer.ToString
としました。

デバックするとエラーが表示されました。
「型 'String'の値を'System.Drawing.Color'に変換できません。」

またIniファイルには下のように書き込まれていました。
[LabelColor]
LB1=Color [Azure]

どのように変換するのか調べたのですが、わかりませんでした。
よろしくお願いします。

[ツリー表示へ]
タイトルRe: BackColorの変換方法は
記事No4451
投稿日: 2006/10/25(Wed) 11:29
投稿者魔界の仮面弁士
> 次にFormを起動したときは、iniファイルを読み込んでLabel1のBackColorを変更します。
背景色の保存であれば、わざわざ面倒な ini ファイルを使うよりも、
標準的な Properties.Settings などを使った方が楽なのでは。

> このLabel1に標準以外の色が付いている場合処理が終わっていると言う意味です。
BackColor はアンビエントなので、『標準以外の色が付いている場合』には
 Friend Overridable Function ShouldSerializeBackColor() As Boolean
のメソッドが True を返すようになっています。

> 「型 'String'の値を'System.Drawing.Color'に変換できません。」
"Red"などの色名から Color への変換を行いたいのであれば、Color.FromName を使えば OK です。

# ちなみに、CE.NET では http://yaplog.jp/orator/archive/42 という手順で。

あるいは色名ではなく、FromArgb / ToArgb メソッドで、数値として保存/取得するとか。

[ツリー表示へ]
タイトルRe^2: BackColorの変換方法は
記事No4452
投稿日: 2006/10/25(Wed) 14:40
投稿者中高年ぼろブラマー
ご回答ありがとうございます。
> > 次にFormを起動したときは、iniファイルを読み込んでLabel1のBackColorを変更します。
> 背景色の保存であれば、わざわざ面倒な ini ファイルを使うよりも、
> 標準的な Properties.Settings などを使った方が楽なのでは。
iniファイルには、BackColorのほかにファイル名だとかエクセルのマクロ名だとか、表示するメッセージなども書き込んでいるので、Properties.Settingsは今後の課題1とします。

> > このLabel1に標準以外の色が付いている場合処理が終わっていると言う意味です。
> BackColor はアンビエントなので、『標準以外の色が付いている場合』には
>  Friend Overridable Function ShouldSerializeBackColor() As Boolean
> のメソッドが True を返すようになっています。
上記メゾットも今後の課題2とします。

> > 「型 'String'の値を'System.Drawing.Color'に変換できません。」
> "Red"などの色名から Color への変換を行いたいのであれば、Color.FromName を使えば OK です。
今回はこのColor.FromNameに集中したいと思います。
MSDNに
Public Shared Function FromName( _
   ByVal name As String _
) As Color
とありました。これを利用すれば良さそう。
http://hanatyan.sakura.ne.jp/dotnet/sys05.htm
を参考に取得と変更は以下のように宣言していますが、いろいろ少ない知識でいじくり倒しましたが、わかりません。
すみませんが、どこをどうすればよいのか教えていただけないでしょうか。

    '指定のINIファイルから文字列を取得する
    <DllImport("KERNEL32.DLL", CharSet:=CharSet.Auto)> _
    Public Shared Function GetPrivateProfileString( _
       ByVal lpAppName As String, _
       ByVal lpKeyName As String, _
       ByVal lpDefault As String, _
       ByVal lpReturnedString As System.Text.StringBuilder, _
       ByVal nSize As Integer, _
       ByVal lpFileName As String) As Integer
    End Function
    '指定のINIファイルの指定のキーの文字列を変更する
    <DllImport("KERNEL32.DLL")> _
    Public Shared Function WritePrivateProfileString( _
       ByVal lpAppName As String, _
       ByVal lpKeyName As String, _
       ByVal lpString As String, _
       ByVal lpFileName As String) As Integer
    End Function

[ツリー表示へ]
タイトルRe^3: BackColorの変換方法は
記事No4453
投稿日: 2006/10/25(Wed) 15:00
投稿者花ちゃん
ここのカラー関係を参考に
http://hanatyan.sakura.ne.jp/dotnet/color01.htm

 色名の取得 
   Dim co As String = Label1.BackColor.Name

 バックカラーの設定
   Label1.BackColor = Color.FromName(co)

[ツリー表示へ]
タイトルRe^4: BackColorの変換方法は
記事No4458
投稿日: 2006/10/26(Thu) 10:40
投稿者中高年ぼろブラマー
ありがとうございました。
試行瞑想錯誤の結果、できました。
>  色名の取得 
>    Dim co As String = Label1.BackColor.Name
>  バックカラーの設定
>    Label1.BackColor = Color.FromName(co)

2行目を追加しました。
ret = GetPrivateProfileString("LabelColor", "LB1", "", strBuffer, strBuffer.Capacity, iniFileName)
Dim co As String = strBuffer.ToString
GroupBox1.Controls("Label1").BackColor = Color.FromName(co)
大変ありがとうございました。

[ツリー表示へ]