すべてのカテゴリ » インターネット・パソコン » 技術・プログラミング

質問

終了

Visual Studio 2008 で、C#でプログラミングをしています。 Brushesクラスのプロパティで取得できるBrushオブジェクトは、インテリセンスで確認できますが、これを視覚的に確認するために、コンボボックスにこの一覧を追加して、ピクチャボックスにその色を描画させたいです。
foreach (Cursor i in Brushes)
{
comboBox1.Items.Add(i.ToString());
}
と書いても、Brushesはコレクションではないため、エラーになってしまいます。Brushesの要素をまとめて保持している変数(?)はあるのでしょうか?自分でコレクションを作って、逐一追加していくしかないのでしょうか?(それだと、全て追加するのはかなり面倒な作業になってしまいます・・・)

  • 質問者:C#初心者
  • 質問日時:2009-04-05 17:21:34
  • 0

並び替え:

リフレクションを利用すれば良いと思います。

コンボボックスに名前を表示するだけなら、こんな感じになると思います。
Type type = typeof(System.Drawing.Brushes);
foreach (PropertyInfo property in type.GetProperties()) {
comboBox1.Items.Add(property.Name);
}

あとは選んだ名前からBrushesのプロパティを呼び出せば良いと思います。
テキストからプロパティを呼び出すのも、同じくリフレクションで可能です。
Type type = typeof(System.Drawing.Brushes);
PropertyInfo property = type.GetProperty(comboBox1.Text);
Brush brush = (Brush)property.GetValue(null, null);

ただ、C#の実行環境が無いので試してません。
あくまでも“こんな感じ”なので、動かない場合は適宜コードを修正してください。

リフレクションについては、こちらを参考にしてください。
http://archive.mag2.com/0000141533/20081117071000000.html

この回答の満足度
  
とても参考になり、非常に満足しました。回答ありがとうございました。
お礼コメント

丁寧な説明ありがとうございます。
リフレクションなんていう便利なものがあったんですね。
参考URLまで載せていただいてありがとうございます!

関連する質問・相談

Sooda!からのお知らせ

一覧を見る