- PR -

デザイナのIListのプロパティに文字列を入力する方法について

1
投稿者投稿内容
こん
会議室デビュー日: 2006/02/03
投稿数: 17
投稿日時: 2008-08-04 12:56
こんにちは。こんと言います。

現在、UserControlを使用してカスタムコントロールを作成しています。
カスタムコントロールでIListのプロパティを定義して、
デザイナから、そのリストの中身を編集したいと思っています。
(IList内のオブジェクトはstring)

プロパティを追加すると、デザイナの[プロパティ]→[その他]に、プロパティ名がでてきます。
そこで、...ボタンをクリックすると、Objectコレクションエディタが開き
追加ボタンを押すと、System.Objectと出てくるのですが何も編集できません。

文字列を入力できるようにする事は可能でしょうか?

皆様にお知恵を拝借したく、よろしくお願いいたします。

(参考ソース)

public partial class SampleUserControl : UserControl
{
private IList _valueList = new ArrayList();
public IList ValueList
{
get{return _valueList;}
set{_valueList = value;}
}
}

上記クラスをデザイナ上でFormなどに貼り付けプロパティを編集

※ ちなみにIListをジェネリック型にしても、StringCollectionにしても
だめでした。。。

よろしくお願いいたします。 m(__)m
Toshi
ベテラン
会議室デビュー日: 2007/09/18
投稿数: 68
お住まい・勤務地: 関東のどっか
投稿日時: 2008-08-04 13:08
.Net Framework2.0 VS2005 C#
ListBoxのItemsプロパティのような感じであれば、このように実現できます。

コード:

private IList stringCol = new ArrayList();
[Editor("System.Windows.Forms.Design.ListControlStringCollectionEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(System.Drawing.Design.UITypeEditor))]
public IList Items
{
get
{
return this.stringCol;
}
}



要件がよくわからないのでなんともいえないのですが、
必要な機能に応じて、コレクションエディタを実装する必要があるかと思います。
ご参考までに・・
UITyepEditor:
http://msdn.microsoft.com/ja-jp/library/system.drawing.design.uitypeeditor.aspx

# ValueList の setの必要性は考慮したほうがよろしいかと思います。

[ メッセージ編集済み 編集者: Toshi 編集日時 2008-08-04 13:09 ]

[ メッセージ編集済み 編集者: Toshi 編集日時 2008-08-04 13:27 ]
こん
会議室デビュー日: 2006/02/03
投稿数: 17
投稿日時: 2008-08-04 13:26
Toshiさん、早速のご返信ありがとうございます!
文字列、入力できるようになりました。

なのですが、文字列を入力しても保存されていないような感じで。。。 (U_U;

これは、Toshiさんがいうsetプロパティに何かしらコードを追記する必要があるのでしょうか?

何かヒントを頂ければなと。。。
よろしければ、よろしくお願いいたします。

Toshi
ベテラン
会議室デビュー日: 2007/09/18
投稿数: 68
お住まい・勤務地: 関東のどっか
投稿日時: 2008-08-04 13:33
すいません、割愛しすぎました・・・

[Editor(…)]
ここでは、どの種類のコレクションEditorを開くのかを指定することしかできません。

実際にコレクションエディタに値をいれても、Desingerクラスにはコードは記載されていないと思います。

適切な属性をプロパティにつける必要があります。
ここでは少なくとも、

コード:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
[Editor("System.Windows.Forms.Design.ListControlStringCollectionEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(System.Drawing.Design.UITypeEditor))]
public IList Items
{
get
{
return this.stringCol;
}
}



としないと、保持はされません。

#UserControlを作成するのであれば、プロパティにつける属性など
#後々のために調べておいたほうがよいと思います。

[ メッセージ編集済み 編集者: Toshi 編集日時 2008-08-04 13:49 ]
こん
会議室デビュー日: 2006/02/03
投稿数: 17
投稿日時: 2008-08-04 13:41
すごい!できました。

Toshiさん、本当にありがとうございました。
とても助かりました。 (#^^#)
1

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