- PR -

システムカラーを選択できるダイアログを作成したい

1
投稿者投稿内容
CO'S
会議室デビュー日: 2005/11/01
投稿数: 8
投稿日時: 2006-02-03 16:48
お世話になっております。カラーダイアログについての質問です。
現在の開発環境は、Visual Studio2005で言語はC#を使用しています。

現在、新アプリケーション開発用に、社内で使用するフォーム配色管理ツールを作成中です。
仕様としては簡単に、色を変更したいコントロールをリストから選択し、カラーダイアログから変更したい色を選択して割り当て、色管理ファイルとして保存すると言う感じです。

質問があるのは、デフォルトのカラーダイアログで選択できる色の他に、フォーム作成中にプロパティから選択できるSystem.Drawing.KnownColor列挙体のシステムカラーをも選択できるようにしたいのです。
カラーダイアログのプロパティにはその列挙体を参照できるようなものがありませんでした。

この場合はダイアログを自作しなければならないのでしょうか?ご教授お願いいたします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-03 17:00
引用:

CO'Sさんの書き込み (2006-02-03 16:48) より:

この場合はダイアログを自作しなければならないのでしょうか?ご教授お願いいたします。


でしょうね。

モデルは Color.FromKnownColor から列挙して表示するか、
SystemColor クラスから取得して表示することになるんでしょうね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
CO'S
会議室デビュー日: 2005/11/01
投稿数: 8
投稿日時: 2006-02-03 17:11
じゃんぬねっとさん
やはりそうですか…。地道に作成したいと思います。
ありがとうございます。
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2006-02-03 17:14
引用:

引用:

この場合はダイアログを自作しなければならないのでしょうか?ご教授お願いいたします。


でしょうね。


AnyColorプロパティではだめですか。。。

ちなみに自身ではオーナードローで色選択コンボボックスを作り使用しています。
#リストのイメージはプロパティで出てくるのと同様、色+名前にしてます。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-03 17:28
引用:

まどかさんの書き込み (2006-02-03 17:14) より:

AnyColorプロパティではだめですか。。。


SystemColor だけじゃないのでダメなのかと... (^-^;)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2006-02-03 17:41
引用:

SystemColor だけじゃないのでダメなのかと... (^-^


私も試さずに言ったのですが、やっぱり。。。
でもColorDialogって人間にとって選択しにくいので自作したほうがいいかも。
nanbu
大ベテラン
会議室デビュー日: 2004/08/19
投稿数: 178
投稿日時: 2006-02-05 04:56
南部です。

やってみようと思って忘れてました。
で、やってみました。

コード:

--使用例--
MyColorEditor editor = new MyColorEditor();
editor.SelectedColor = Color.Azure;
if(DialogResult.OK == editor.ShowEditor())
{
MessageBox.Show(editor.SelectedColor.Name);
}
----------

public class MyColorEditor : ColorEditor
{
private MyColorServiceProvider provider = new MyColorServiceProvider();
private Color selectedColor;

public DialogResult ShowEditor()
{
Color retVal = (Color)EditValue(provider, selectedColor);
if(retVal == selectedColor)
{
return DialogResult.Cancel;
}

selectedColor = retVal;
return DialogResult.OK;
}

public Color SelectedColor
{
get { return selectedColor; }
set { selectedColor = value; }
}

#region サービスプロバイダ
public class MyColorServiceProvider : IServiceProvider
{
public object GetService(Type serviceType)
{
if(serviceType == typeof(IWindowsFormsEditorService))
{
return new MyColorEditorService();
}

return null;
}
}
#endregion

#region カラーエディタサービス
public class MyColorEditorService : IWindowsFormsEditorService
{
private Control editor;
//デフォルトのFormなのでそれっぽいのに変えて下さい。
private Form form = new Form();

public void CloseDropDown()
{
form.Visible = false;
form.Controls.Remove(editor);
form.Close();
}

public void DropDownControl(Control editor)
{
this.editor = editor;
editor.Dock = DockStyle.Fill;
form.Controls.Add(editor);
form.ShowDialog();
}

public DialogResult ShowDialog(Form dialog)
{
throw new NotSupportedException("使用しません。");
}
}
#endregion
}



#横に長かったのでTABをSP*2に修正

[ メッセージ編集済み 編集者: nanbu 編集日時 2006-02-05 05:29 ]
1

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