- じょんのび
- 常連さん
- 会議室デビュー日: 2004/05/06
- 投稿数: 20
|
投稿日時: 2005-09-17 23:45
VisualStudio2005 Beta2 のC#で、
ファンクションキーに対応するボタンを
12個並べたユーザーコントロールを作成しています。
12個のボタンのフォントを一括して設定する
プロパティを実現したいと思い、
下記の様にFontプロパティのコードを記述しました。
コード: |
| public override Font Font
{
get
{
return btnF01.ForeColor;
}
set
{
btnF01.ForeColor = value;
btnF02.ForeColor = value;
btnF03.ForeColor = value;
btnF04.ForeColor = value;
btnF05.ForeColor = value;
btnF06.ForeColor = value;
btnF07.ForeColor = value;
btnF08.ForeColor = value;
btnF09.ForeColor = value;
btnF10.ForeColor = value;
btnF11.ForeColor = value;
btnF12.ForeColor = value;
}
}
|
ビルド迄は正常にできるのですが、
いざこのコントロールをフォームに貼り付けると、
VS2005のIDEが無言で落ちてしまいます。
試しに、overrideせずプロパティ名を"Font1"にすると、
正常に動作してくれます。
Web上で検索して同様の記述を見つけたのですが、
何が誤っているのか分かりません。
初歩的な誤りをしているのだと思いますが、
宜しくお願いします。
|
- じょんのび
- 常連さん
- 会議室デビュー日: 2004/05/06
- 投稿数: 20
|
投稿日時: 2005-09-17 23:49
掲載しようとしたコードが誤っていました。
失礼しました。
コード: |
| public override Font Font
{
get
{
return btnF01.Font;
}
set
{
btnF01.Font = value;
btnF02.Font = value;
btnF03.Font = value;
btnF04.Font = value;
btnF05.Font = value;
btnF06.Font = value;
btnF07.Font = value;
btnF08.Font = value;
btnF09.Font = value;
btnF10.Font = value;
btnF11.Font = value;
btnF12.Font = value;
}
}
|
これでうまくいきません。
宜しくお願いします。
|
- 囚人
- ぬし
- 会議室デビュー日: 2005/08/13
- 投稿数: 1019
|
投稿日時: 2005-09-18 02:02
こんにちわ。
コード: |
|
public override Font Font
{
get
{
return base.Font;
btnF01.Font;
}
set
{
base.Font = value;
btnF01.Font = value;
btnF02.Font = value;
btnF03.Font = value;
btnF04.Font = value;
btnF05.Font = value;
btnF06.Font = value;
btnF07.Font = value;
btnF08.Font = value;
btnF09.Font = value;
btnF10.Font = value;
btnF11.Font = value;
btnF12.Font = value;
}
}
|
回避方法はこうですね。
理由は、ヘルプにもありますが、Font がアンビエント プロパティだからです。
btnFN のフォントが設定されていないと、親のフォントを取得しますが、親が返しているのが、また、btnN のフォント。そしてまた…。ということですね。
#追記
だから、そのようなプロパティを用意しなくても、親であるユーザコントロールのフォントを設定するだけでOKだと思います。
[ メッセージ編集済み 編集者: 囚人 編集日時 2005-09-18 02:04 ]
|
- じょんのび
- 常連さん
- 会議室デビュー日: 2004/05/06
- 投稿数: 20
|
投稿日時: 2005-09-18 09:14
Fontプロパティの循環参照の様な事が起きていたのですね。
試しに、baseに対して、get set する様にソースを直したところ、
IDEが落ちる事は無くなりました。
また、ご指摘の通り、コード上何も記述せずとも、
やりたい事が既に出来ていました。
勉強になりました。
どうもありがとうございました。
|