- - PR -
C# 文字列コレクションのプロパティの作り方について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-02-03 15:25
こんにちは。 自作のコントロールに コンボボックスのitemsのようなプロパティを作りたいですが。 System.Collections.Specialized.StringCollection spokesCollection = new System.Collections.Specialized.StringCollection(); public System.Collections.Specialized.StringCollection HeaderText { get { return spokesCollection; } set { this.spokesCollection.Add(value); } } のように作りましたが、うまくできませんでした。 コンボボックスのitemsのようなプロパティの作り方をご存知の方、その作り方を教えていただけませんか? | ||||
|
投稿日時: 2005-02-03 15:31
「うまくできませんでした。」というのはつまりどういう事ですか?
どうなると思いました?そして実際どうなりました? の前にそのソースはコンパイル通りますか? ちなみに私のお勧めは、setを消して public System.Collections.Specialized.StringCollection HeaderText { get { return spokesCollection; } } こうです。 | ||||
|
投稿日時: 2005-02-03 16:00
一郎 様
説明不足ですみません。 >>そして実際どうなりました? >>の前にそのソースはコンパイル通りますか? コンパイルは通りましたが、「プロパティ] ウィンドウでコントロールの HeaderText プロパティの横にある省略記号ボタンをクリックし、「String コレクション エディタ」で追加ボタンをクリックしたら、「型System.Stringにコンストラクタが見つかりませんでした」のエラーメッセージが表示されました。 | ||||
|
投稿日時: 2005-02-03 16:11
this.spokesCollection.Add(value); ここの部分ってAdd()の第一引数の型(string)とvalueの型(StringCollection)が合っていませんよね。 私の環境ではコンパイルが通らないんですが。 ComboBoxのItemsのようにしたいのでしたらComboBoxのItemsの型を見てみてはいかがでしょうか。ComboBox.ObjectCollectionとなっていますね。 それをまねして自分でHeaderText用の型を作ってみるとか。 | ||||
|
投稿日時: 2005-02-03 16:26
>>this.spokesCollection.Add(value);
>>ここの部分ってAdd()の第一引数の型(string)とvalueの型(StringCollection)が合って>>いませんよね。 >>私の環境ではコンパイルが通らないんですが。 確かにおっしゃっている通りです。set{}の部分でコンパイルは通らないですが、 「コンパイルは通りましたが・・・ 」とは、一郎様の勧められたget{}だけのソースです。 そして、「型System.Stringにコンストラクタが見つかりませんでした」のエラーメッセージもget{}だけの時のエラーメッセージです。 | ||||
|
投稿日時: 2005-02-04 12:55
ComboBoxのItemsのプロパティみたいなプロパティエディタがほしい場合はUITypeEditorを継承して自分で作る方法しか私は知らないです。
逃げ道としてはstringをメンバに持ったクラスを作って,それのTypeConverter もつくりInstanceDescriptor型への変換をサポートするようにする。 後は,そのクラスに特化したコレクションクラスを作ってそれをStringCollection のかわりに使うようにする。 プロパティに[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]属性を付けるのも忘れずに。 | ||||
|
投稿日時: 2005-09-14 15:58
この方法は、どうでしょうか?
System.Collections.Specialized.StringCollection collection = new System.Collections.Specialized.StringCollection(); string[] stringArray; public string[] MyItems { get { stringArray = new string[collection.Count]; collection.CopyTo(stringArray, 0); return stringArray; } set { collection.Clear(); collection.AddRange(value); } } [ メッセージ編集済み 編集者: たかたけ 編集日時 2005-09-14 16:03 ] | ||||
|
投稿日時: 2007-10-19 16:38
ちと古い内容ですが…
他に探しても以外と無かったのでこちらにカキコしてみます。 「StringCollection」 を使用したプロパティに「文字列コレクションエディタ」を使用する方法です。 Visual C# 2003 & 2005 で確認しました。
[ メッセージ編集済み 編集者: Algol 編集日時 2007-10-19 17:04 ] |