- - PR -
カスタムコントロールの構造体プロパティについて
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-09-02 15:03
現在、TextBoxをBaseにカスタムコントロールを作成しています。
追加プロパティにて独自の構造体タイプのプロパティをもうけようと考えています。 既存のLocationプロパティのようにIDEで+ボタンを押すとx,yが設定できるようにしたいのですが、どのようにすればよいでしょうか? namespace ClassLibrary7 { public struct UserStruct { public int X; public int Y; public UserStruct(int ix, int iy) { X = ix; Y = iy; } } public class TextBoxEX : System.Windows.Forms.TextBox { /// <summary> /// 必要なデザイナ変数です。 /// </summary> private System.ComponentModel.Container components = null; public TextBoxEX() { // この呼び出しは、Windows.Forms フォーム デザイナで必要です。 InitializeComponent(); } private UserStruct m_p = new UserStruct(); /// <summary> /// 使用されているリソースに後処理を実行します。 /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if( components != null ) components.Dispose(); } base.Dispose( disposing ); } public UserStruct Test { set { m_p.X = value.X; m_p.Y = value.Y; } get { return new UserStruct(m_p.X,m_p.Y); } } #region Component Designer generated code /// <summary> /// デザイナ サポートに必要なメソッドです。このメソッドの内容を /// コード]エディタで変更しないでください。 /// </summary> private void InitializeComponent() { // // UserControl1 // this.Name = "UserControl1"; } #endregion } } UserStructをPoint型に変更するとIDEプロパティ画面でX,Yで変更できるのですが… 独自構造体に何らかの属性等をもうけないといけないのでしょうか? | ||||
|
投稿日時: 2005-09-02 16:19
TypeConverterAttributeで
ExpandableObjectConverterを指定すればできたと思います。 | ||||
|
投稿日時: 2005-09-02 16:33
そうです。デザイナで使用する構造体の場合、やらないといけないことが結構あります。 お望みの機能はカスタムなTypeConverterを作成し、そのGetPropertiesをオーバーライドすることによって実現できます(GetPropertiesSurportedも忘れずに)。標準でしたらExpandableObjectConverterというものがありますから、これから継承するかそのままつかうといいでしょう。 その後、setterをサポートする必要があるのならば、コンストラクションコードが作成できるようにするために、InstanceDescriptorに変換可能なように実装する必要もあります(この辺がExpandableObjectConverterに実装されているかは忘れました)。 もちろん、そのTypeConverterはTypeConverterAttributeによってその構造体に結びつける必要もあります。 詳細な情報としては、デザイン時サポートの拡張 の中の 型コンバータの実装 あたりを参考にしてください。 #追記 コードをよく見たらパブリックフィールドにしていますね…パブリックにするのはプロパティにしたほうがよいです [ メッセージ編集済み 編集者: ya 編集日時 2005-09-02 16:39 ] | ||||
|
投稿日時: 2005-09-02 17:54
壱丸3さん、yaさん、レスありがとう御座います。
なかなか、面倒なようですねぇ・・・A(^^; 今回、時間がないので、「とりあえず」の方法で逃げようと思いますが、せっかくご教授いただいたので、必ず自分のものにしたいと思います。 ありがとう御座いました。 |
1