- PR -

プロパティー設定について

1
投稿者投稿内容
なりこ
ベテラン
会議室デビュー日: 2005/06/09
投稿数: 61
投稿日時: 2005-07-19 16:11
C#で開発中なのですが、プロパティー設定について悩んでいます。
画面のプロパティー設定を、外部ファイル(xml等)を使って行いたいのですが、
うまくいきません。
xmlファイルに設定するとテキスト型になりますよね?
それをそのままプロパティーに設定することは出来きません。

Color.Redとかで設定するのは分かっているのですが、
外部ファイルの設定値を使用すれば、プログラムを変更せずに済むかと
思ったのでこの手段を取りたいのです。
皆さんはこんな場合、どういう方法で設定しているのでしょうか?
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2005-07-19 16:52
諸農です。

問題点は「色の設定」ですか?

例えばこんな感じで色をstring型のオブジェクトに文字列形式で格納したり、string型のオブジェクトに格納されている文字列形式の値から色オブジェクトを作ったりすることが出来ます。
コード:
private void button1_Click(object sender, System.EventArgs e)
{
    textBox1.Text = button1.BackColor.Name;
}

private void button2_Click(object sender, System.EventArgs e)
{
    button1.BackColor = Color.FromName(textBox1.Text);
}




_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
kanai
ベテラン
会議室デビュー日: 2004/09/13
投稿数: 98
投稿日時: 2005-07-19 17:05
型変換を行う他はないと思います。

列挙型の名前から値を取得することもできます。(Enumクラスを使う)

Colorであれば、Color.FromName("Red")の"Red"をApp.configから取得するようにするとか。

なりこ
ベテラン
会議室デビュー日: 2005/06/09
投稿数: 61
投稿日時: 2005-07-19 17:17
諸農さん、kanaiさんありがとうございます。

XmlElement elm = (XmlElement)button.FirstChild;
aaa=elm.GetAttribute("backcolor");
Color.FromName(aaa);

こんな感じで設定できました。
この場合は16進数を使用しての設定は出来ないのですね。
16進で設定したい場合は、どのようにすればいいのでしょうか?

Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2005-07-19 18:03
諸農です。

引用:

この場合は16進数を使用しての設定は出来ないのですね。
16進で設定したい場合は、どのようにすればいいのでしょうか?



Color.ToArgb()で取得したint値を書式変換(x)で
16進数表現の文字列に変換できますよ。


_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
なりこ
ベテラン
会議室デビュー日: 2005/06/09
投稿数: 61
投稿日時: 2005-07-19 18:41

返信ありがとうございます。

Color.ToArgb()を試そうと思ったのですが、Color.と入力しても
ToArgbが表示されていません。
それと、ちょっと意味が理解できませんでした。

やりたいことは、
「xmlファイルに設定した16進カラー(#87CEEB)を
フォームロード時にボタンのカラーに設定したい」
って感じなんですが。。。

余談ですが、.NETでフォーム(コントロール含む)のプロパティーを設定
するのって、結構面倒なんでしょうか?
カラー以外にも、フォントの設定等も行おうと思っていたのですが
ヘルプを見ても、思うように設定できません。

プロパティー設定について、分かりやすく解説されている
サイトとかをご存知でしたら、教えていただけないでしょうか?

117
ベテラン
会議室デビュー日: 2005/05/09
投稿数: 94
お住まい・勤務地: 大阪府
投稿日時: 2005-07-19 20:13
#プロパティ設定というか、データ型の変換で引っかかっているように見受けられますが

Convert.ToInt32()で文字列→整数に変換してから
Color.FromArgB()でどうです?

[思い出したので追記]
すっかり忘れてましたが ColorTranslator.FromHtml()を使えばもっと楽。
_________________
Future Is What We Are!

[ メッセージ編集済み 編集者: 117 編集日時 2005-07-19 20:17 ]
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2005-07-19 20:14
諸農です。

引用:

Color.ToArgb()を試そうと思ったのですが、Color.と入力しても
ToArgbが表示されていません。
それと、ちょっと意味が理解できませんでした。



あ、そうなんですか?わかりませんでしたか?
ドキュメントは見られましたか?
ToArgb()メソッドはインスタンスメソッドですよ。
Colorの後にドットを打ち込んでも出てこないのは当然ですよ。

> それと、ちょっと意味が理解できませんでした。

ドキュメント見ればわかると思うのですが、
To〜があればFrom〜もありそうだと予測できませんか?
何でもかんでも質問する前に、ちょっとだけでも自分なりに
ドキュメントの内容を確認してみませんか?

引用:

やりたいことは、
「xmlファイルに設定した16進カラー(#87CEEB)を
フォームロード時にボタンのカラーに設定したい」
って感じなんですが。。。



Color構造体の説明には「ARGB 色を表します。」と書いてありますけど、
> (#87CEEB)
だと1バイト少ないのかな。

コード:
 //色を16進数表現の文字列で取得(4バイト分)
 textBox1.Text = Color.Red.ToArgb().ToString("x");

----ToArgb()の解説から引用---
32 ビットの ARGB 値のバイト順は AARRGGBB です。
AA で表している最上位バイト (MSB) はアルファ コンポーネントの値です。
RR、GG、BB で表している 2 番目、3 番目、4 番目のバイトは、それぞれ
赤、緑、青のカラー コンポーネントです。たとえば、色を 4 つのコンポ
ーネントの値から作成したとします。 ToArgb メソッドを使用すると次の
ように 32 ビットの ARGB 値を取得できます。
----引用終わり-----

 //4バイト分の色表現16進数文字列から数値変換を行い
 //Colorオブジェクトを生成してからプロパティにセット
 button1.BackColor = Color.FromArgb(Convert.ToInt32(textBox1.Text,16));



上記コードで使っている変換クラスやメソッドの詳細については、
.NET SDKで提供されているドキュメントを良く読んでいただけますように、
よろしくお願いいたします。

引用:

余談ですが、.NETでフォーム(コントロール含む)のプロパティーを設定
するのって、結構面倒なんでしょうか?



そうなんですか?
そんなことはないでしょう(^^;

引用:

カラー以外にも、フォントの設定等も行おうと思っていたのですが
ヘルプを見ても、思うように設定できません。



どのように出来ないのですか?
Colorオブジェクトと同様で、Fontオブジェクトを作る必要がありますよ。

引用:

プロパティー設定について、分かりやすく解説されている
サイトとかをご存知でしたら、教えていただけないでしょうか?



投稿内容から推測すると、書籍で基本から順に学ばれた方が良いような気もしますが、とりあえずは基本なんかよりも、すぐに動かすことの出来る答えが欲しいのですよね?
そうであるなら.NETプログラミングにピンポイントで役立つテクニックとヒント集などが良いのではないでしょうか。



_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
1

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