DOBON.NET DOBON.NETプログラミング掲示板過去ログ

String配列のプロパティ

環境/言語:[WinXP SP1/ VB.NET Standard2002/.NET Framework 1.1]
分類:[.NET]

ListViewを継承してファイルリストを表示させるコントロールを作っているのですが、
Filterプロパティ(String配列)を作成したのですが、
これをTextBoxのLines配列のようにプロパティウィンドウに表示して編集できるようにしたいのですが、
なにか特別なコーディングが必要なのでしょうか?

String配列のプロパティは作っただけではプロパティウィンドウに出てきません。

TextBoxでは「文字列コレクションエディタ」というウィンドウが出てきますが、
これと同様なことをしたいと思っています。

よろしくお願いします。
コントロールのプロパティがIDEのプロパティウィンドウに表示されない理由は2つほど考えられます。

1.対象のプロパティがpublic以外
デザイナはpublicではないコントロールのプロパティを読み込むことはできません(公開されていないため、デザイナだけでなく外部からはこのプロパティにアクセスできません)。

2.Browsable属性(System.ComponentModel.BrowsableAttribute)
プロパティにBrowsable(false)が設定されているとデザイナはこのプロパティを読み取りません(1の場合とは異なり、コードの中から普通にこのプロパティにアクセスできます)。
返信ありがとうございます。

プロパティは以下のようにしてあります。
---
Public Property Filter(ByVal i As Integer) As String
Get
End Get
Set(ByVal Value As String)
End Set
End Property
---

> 1.対象のプロパティがpublic以外
上記のように、Publicにしてあります。

> 2.Browsable属性(System.ComponentModel.BrowsableAttribute)
調べてみたのですが、デフォルトはTrueらしいので、これも違うと思います。
> プロパティは以下のようにしてあります。
> ---
> Public Property Filter(ByVal i As Integer) As String
> Get
> End Get
> Set(ByVal Value As String)
> End Set
> End Property
> ---

このプロパティがそもそもStringの配列を返すプロパティではないので、
Linesプロパティのように設定できないのは当然かと思いますけど。
> Public Property Filter(ByVal i As Integer) As String
> Get
> End Get
> Set(ByVal Value As String)
> End Set
> End Property

よねKENさんのおっしゃるとおり、String配列を返していないので動作しません(インデクサを作成し、String配列と同じ動作をすることが必要なのではなく、String配列をGet/Setできる必要があります。またこのことから察するにプロパティウィンドウにはインデクサは操作できないようですね)。
この部分は、

Public Property Filter() As String()
Get
End Get
Set(ByVal Value As String())
End Set
End Property

というようにすべきだと思います。

あのコードではC#からだと利用できず、get_/set_を直接呼び出さないといけないという恐るべきコードになります(C#ではItemという名前以外のインデクサは許可されていません)。
2004/02/16(Mon) 20:39:08 編集(投稿者)
2004/02/16(Mon) 20:33:33 編集(投稿者)

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

>インデクサを作成し、String配列と同じ動作をすることが必要なのではなく、
>String配列をGet/Setできる必要があります。

なるほど、頂いたコードで希望通りの動作ができました。
少し考えすぎたようです。


あと、関連することで新たに1つ疑問が出てきたのですが、
ListBoxのItemsプロパティはコレクションですが、
プロパティウィンドウから編集する際は、String配列と同じように
文字列コレクションエディタが出てきますが、
こういったプロパティはどうすると作成できるのでしょうか。

よろしくお願いいたします。
> ListBoxのItemsプロパティはコレクションですが、
> プロパティウィンドウから編集する際は、String配列と同じように
> 文字列コレクションエディタが出てきますが、
> こういったプロパティはどうすると作成できるのでしょうか。
ドキュメントで調べたわけではありませんが、ICollectionインターフェイスをやりとりするプロパティを公開している場合にこのようなエディタが表示されるようです(どのようなエディタが表示されるかはそのコレクションの型に依るようです)。
> あと、関連することで新たに1つ疑問が出てきたのですが、
> ListBoxのItemsプロパティはコレクションですが、
> プロパティウィンドウから編集する際は、String配列と同じように
> 文字列コレクションエディタが出てきますが、
> こういったプロパティはどうすると作成できるのでしょうか。

Editor属性(EditorAttributeクラス)を調べて下さい。
返信ありがとうございます。

Objectコレクションエディタを出す方法はなんとなくわかったのですが、
どうしても文字列コレクションエディタがだせません・・・。

とりあえず今回はString配列で済ませました。
(コレクションだとAddなどが使えて操作が楽だったのですが)
> Objectコレクションエディタを出す方法はなんとなくわかったのですが、

Objectコレクションエディタというのは何のことでしょうか?
CollectionEditorクラスのことであれば、
コンストラクタの引数typeに適切な型を渡せばよいのではないでしょうか?

> どうしても文字列コレクションエディタがだせません・・・。

String()の場合、おそらくArrayEditorが使われていると思います。

DOBON.NET | プログラミング道 | プログラミング掲示板