- PR -

C# 文字列コレクションのプロパティの作り方について

投稿者投稿内容
comeseesee
常連さん
会議室デビュー日: 2004/11/24
投稿数: 36
投稿日時: 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のようなプロパティの作り方をご存知の方、その作り方を教えていただけませんか?
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2005-02-03 15:31
「うまくできませんでした。」というのはつまりどういう事ですか?

どうなると思いました?そして実際どうなりました?
の前にそのソースはコンパイル通りますか?

ちなみに私のお勧めは、setを消して
public System.Collections.Specialized.StringCollection HeaderText
{
  get
  {
    return spokesCollection;
  }
}
こうです。
comeseesee
常連さん
会議室デビュー日: 2004/11/24
投稿数: 36
投稿日時: 2005-02-03 16:00
一郎 様
説明不足ですみません。

>>そして実際どうなりました?
>>の前にそのソースはコンパイル通りますか?

コンパイルは通りましたが、「プロパティ] ウィンドウでコントロールの HeaderText プロパティの横にある省略記号ボタンをクリックし、「String コレクション エディタ」で追加ボタンをクリックしたら、「型System.Stringにコンストラクタが見つかりませんでした」のエラーメッセージが表示されました。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2005-02-03 16:11
引用:

comeseeseeさんの書き込み (2005-02-03 16:00) より:
コンパイルは通りましたが・・・


this.spokesCollection.Add(value);
ここの部分ってAdd()の第一引数の型(string)とvalueの型(StringCollection)が合っていませんよね。
私の環境ではコンパイルが通らないんですが。

ComboBoxのItemsのようにしたいのでしたらComboBoxのItemsの型を見てみてはいかがでしょうか。ComboBox.ObjectCollectionとなっていますね。
それをまねして自分でHeaderText用の型を作ってみるとか。
comeseesee
常連さん
会議室デビュー日: 2004/11/24
投稿数: 36
投稿日時: 2005-02-03 16:26
>>this.spokesCollection.Add(value);
>>ここの部分ってAdd()の第一引数の型(string)とvalueの型(StringCollection)が合って>>いませんよね。
>>私の環境ではコンパイルが通らないんですが。

確かにおっしゃっている通りです。set{}の部分でコンパイルは通らないですが、
「コンパイルは通りましたが・・・ 」とは、一郎様の勧められたget{}だけのソースです。
そして、「型System.Stringにコンストラクタが見つかりませんでした」のエラーメッセージもget{}だけの時のエラーメッセージです。
Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2005-02-04 12:55
ComboBoxのItemsのプロパティみたいなプロパティエディタがほしい場合はUITypeEditorを継承して自分で作る方法しか私は知らないです。
 
逃げ道としてはstringをメンバに持ったクラスを作って,それのTypeConverter
もつくりInstanceDescriptor型への変換をサポートするようにする。
後は,そのクラスに特化したコレクションクラスを作ってそれをStringCollection
のかわりに使うようにする。
プロパティに[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]属性を付けるのも忘れずに。

たかたけ
会議室デビュー日: 2005/09/14
投稿数: 1
投稿日時: 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 ]
Algol
会議室デビュー日: 2007/10/19
投稿数: 2
投稿日時: 2007-10-19 16:38
ちと古い内容ですが…
他に探しても以外と無かったのでこちらにカキコしてみます。

「StringCollection」 を使用したプロパティに「文字列コレクションエディタ」を使用する方法です。

Visual C# 2003 & 2005 で確認しました。

コード:


/// <summary>
/// プロパティ保存用の StringCollection
/// </summary>
private StringCollection _Items = new StringCollection();

/// <summary>
/// StringCollection を使用したプロパティ
/// </summary>
[Editor("System.Windows.Forms.Design.StringCollectionEditor, System.Design", typeof(UITypeEditor)),
TypeConverter(typeof(CollectionConverter)),
DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public StringCollection Items
{
get
{
return this._Items;
}
set
{
this._Items = value;
}
}



[ メッセージ編集済み 編集者: Algol 編集日時 2007-10-19 17:04 ]

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