- PR -

C# WindowsForm:カラーダイアログのカスタムカラー追加方法

1
投稿者投稿内容
GO-TEN
常連さん
会議室デビュー日: 2003/12/07
投稿数: 20
投稿日時: 2004-09-04 16:28
C# Windows で、ボタンをクリックするとカラーダイアログを表示し、
色を選択するとボタンの背景色が変わるという機能を作成中です。

(1)ボタンをクリック
(2)カラーダイアログ表示
(3)カスタムカラーを作成・指定してOK
(4)ボタンの背景色を作成したカスタムカラーに変更
(5)ボタンを再度クリック
(6)ボタンの背景色がシステムカラーにないのでカスタムカラーに追加
(7)カラーダダイアログ表示

という機能を実装したいのですが、(6)のカスタムカラーを追加で、
ボタンの背景色と同じカスタムカラーが追加されません。
見た目かなり黒い色になっています。

(6)のコードは以下のとおりです。

////////////////////////////////////////////////////////////////////

 ColorDialog cd = new ColorDialog();
 //[作成した色]にボタンの背景色を表示する
 cd.CustomColors = new int[] {this.button1.BackColor.ToArgb()};

////////////////////////////////////////////////////////////////////

CustomColorsには、どの値をセットしてやればよいのでしょうか。
ant
常連さん
会議室デビュー日: 2004/03/24
投稿数: 44
投稿日時: 2004-09-04 23:18
通常BackColorプロパティは透過色をサポートしません。従って、BackColor.Aの値は
常に256です。よって、そのままではToArgb()を実行することができません。
一例としては、次のようにすることができると思います。
コード:
private int RGB(byte red, byte green, byte blue)
{
    return (((blue * 0x10000) + (green * 0x100)) + red);
}

private void button1_Click(object sender, System.EventArgs e)
{
    ColorDialog MyDialog = new ColorDialog();
    MyDialog.AllowFullOpen = true;
    MyDialog.CustomColors = new int [] 
        {RGB(button1.BackColor.R,button1.BackColor.G,button1.BackColor.B)};
    MyDialog.Color = button1.BackColor;
    if (MyDialog.ShowDialog() == DialogResult.OK)
        button1.BackColor =  MyDialog.Color;
}


上記のRGBメソッドはVBのRGB関数をしようしてもいいと思います。
ant
常連さん
会議室デビュー日: 2004/03/24
投稿数: 44
投稿日時: 2004-09-05 20:47
RGBメソッドを独自に定義していましたが、どうやら車輪の…だったようです
ColorTranslator.ToWin32メソッドが使えそうです。

コード:
MyDialog.CustomColors = new int [] {ColorTranslator.ToWin32(button1.BackColor)};

GO-TEN
常連さん
会議室デビュー日: 2003/12/07
投稿数: 20
投稿日時: 2004-09-06 18:23
ありがとうございました。
ColorTranslator.ToWin32 で無事解決いたしました!

>通常BackColorプロパティは透過色をサポートしません。従って、BackColor.Aの値は
>常に256です。

たいへん勉強になりました。感謝です。ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)