- PR -

プロパティのoverride [C# by VS2005 Beta2]

1
投稿者投稿内容
じょんのび
常連さん
会議室デビュー日: 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が落ちる事は無くなりました。
また、ご指摘の通り、コード上何も記述せずとも、
やりたい事が既に出来ていました。

勉強になりました。
どうもありがとうございました。
1

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