- PR -

Text プロパティがプロパティウィンドウに表示されない理由

投稿者投稿内容
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-03-14 19:47
以下で、Text プロパティがデザイン時のプロパティウィンドウに表示されません。

コード:
public class MyControl : UserControl
{
    private string _これは表示される;
    public string これは表示される {
        get { retuen this._これは表示される; }
        set { this._これは表示される = value; }
    }

    public override string Text {  // これは表示されない。
        get { return base.Text; }
        set { base.Text = value; }
    }
}



どうしてですか?
ちなみに、VC#2005 の環境です。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-14 20:30
引用:

R・田中一郎さんの書き込み (2006-03-14 19:47) より:

以下で、Text プロパティがデザイン時のプロパティウィンドウに表示されません。
どうしてですか?


UserControl.Text プロパティの Browsable 属性が false だからです。
詳しくは、メタデータを見てください。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-03-15 09:29
引用:

じゃんぬねっとさんの書き込み (2006-03-14 20:30) より:

UserControl.Text プロパティの Browsable 属性が false だからです。
詳しくは、メタデータを見てください。



ありがとうございました。メタデータなる存在自体を知りませんでした。
これからは、プロパティを追加する際に使用するコードスニペットに追加するように
したいと思いました。

こんな感じ。
コード:

<CodeSnippets
xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>
新規プロパティテンプレート
</Title>
</Header>
<Snippet>
<Declarations>
<Literal>
<ID>プロパティ名</ID>
<Default>プロパティ名</Default>
</Literal>
<Literal>
<ID>型名</ID>
<Default>int</Default>
</Literal>
</Declarations>
<Code Language="csharp">
<![CDATA[

#region $プロパティ名$ Property
//**************************************************************************************************
// $プロパティ名$ Property
//**************************************************************************************************
private $型名$ _$プロパティ名$;
[Browsable(true)]
[Category("ここに、このプロパティのカテゴリ(表示、動作など)を指定します。")]
[DefaultValue(int.MaxValue)]
[Description("このプロパティの説明をここに入力します。")]
[RefreshProperties(RefreshProperties.Repaint)]
public $型名$ $プロパティ名$ {
get {
return this._$プロパティ名$;
}
set {
this._$プロパティ名$ = value;
}
}

#endregion]]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>


#ちなみに、この方法だと、「Text」というプロパティを設けると、ローカル変
数の設定が this._Text になって、C#コーディング標準と違ってしまうのが問題
です。


[ メッセージ編集済み 編集者: R・田中一郎 編集日時 2006-03-15 09:31 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-15 09:50
引用:

R・田中一郎さんの書き込み (2006-03-15 09:29) より:

#ちなみに、この方法だと、「Text」というプロパティを設けると、ローカル変
数の設定が this._Text になって、C#コーディング標準と違ってしまうのが問題
です。


C# コーディング標準は社内によるものですか?

PDF で提供されている例のブツは、Java の標準を元にして作成した (オブジェクトクラブの) もので、
Microsoft の標準 (とはいえ、FCL 作成者のみ) では、
Private フィールドについて言及していなかったように思います。
Protected フィールドについては、Camel 形式を使いましょう、になってますけども。

# 既存の NCL にも、アンダースコア開始の命名は使われてますし。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-03-15 10:05
引用:

Protected フィールドについては、Camel 形式を使いましょう、になってますけども。


あれ、そうでしたっけ?とにかく外に見えるものは Pascal 形式だったように思いますけども。

_________________
囚人のジレンマな日々
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-15 11:10
引用:

囚人さんの書き込み (2006-03-15 10:05) より:

あれ、そうでしたっけ?とにかく外に見えるものは Pascal 形式だったように思いますけども。


Protected フィールドは、この場合 "外" ではないですね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-03-15 11:18
引用:

じゃんぬねっとさんの書き込み (2006-03-15 09:50) より:
引用:

R・田中一郎さんの書き込み (2006-03-15 09:29) より:

#ちなみに、この方法だと、「Text」というプロパティを設けると、ローカル変
数の設定が this._Text になって、C#コーディング標準と違ってしまうのが問題
です。


C# コーディング標準は社内によるものですか?

PDF で提供されている例のブツは、Java の標準を元にして作成した (オブジェクトクラブの) もので、
Microsoft の標準 (とはいえ、FCL 作成者のみ) では、
Private フィールドについて言及していなかったように思います。
Protected フィールドについては、Camel 形式を使いましょう、になってますけども。

# 既存の NCL にも、アンダースコア開始の命名は使われてますし。




C#コーディング標準
(C)Copyright 2002 河端善博
初版 2002年 9月25日

というのを参考にしています。この10頁目にある
「(30)private/protected/internal/protected internalスコープの共通変数」
では「先頭を小文字で」とあります。

僕は、プロパティに関しては、

private int _PropertyName;
public int PropertyName {}

のようにしていますが、_ を先頭とみるか、P を先頭とみるかということでしょう
か。

private int _propertyName;

とするのが正しいと思っていたのですけれども。

#もしや古いバージョンなのだろうか・・・
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-15 11:21
コード:

    MSDN ライブラリ 大文字の使用スタイル より:

    プロテクト インスタンス フィールド	Camel	redValue

      メモ : ほとんど使用しません。
             プロテクト インスタンス フィールドよりも、
             プロパティの方がよく使用されます。

    パブリック インスタンス フィールド	Camel	RedValue

      メモ : ほとんど使用しません。
             パブリック インスタンス フィールドよりも、
             プロパティの方がよく使用されます。


フィールドに使うのは読み取り専用か、定数くらいでしょうね。
殆どが静的メンバになりますので、上記にはあてはまらないわけで、
そういう意味では「Protected インスタンス フィールド」と書いた方が良かったですね。(^^)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

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