トップ回答者
ユーザコントロールにおける内在コントロールのプロパティ公開について

質問
-
現在ユーザコントロールを作成しております。
内在コントロールのプロパティについてのご質問です。
目的としましては、複数ある内在コントロールの各プロパティを、
コーディングなし、または極めて少ないコーディング量で公開し、
コントロールを使用する際にはデザイナ上でプロパティを設定可能とする事です。
内在コントロールがいくつかある場合、それらのプロパティを公開するには
①カスタムプロパティをコーディングする
②内在コントロールのModifiersプロパティをPublicにする
の2つの方法があるかと思います。
①の方法に関してはコーディング量が非常に多くなってしまうので、
工数の制約上避けたいと思っております。
②の方法に関しては、半分は目的が達成できています。
半分という理由は、内在コントロールのプロパティは設定できますが、
デザイナ上では変更できないからです。
そこで、下記の様に内在コントロール自体をプロパティで取得可能としました。
/// <summary>その結果、コントロール使用時にデザイナ上で内在コントロールのプロパティを
/// ラベルコントロールを取得します。
/// </summary>
public System.Windows.Forms.Label Label
{
set
{
this.LabelControl = value;
}
get
{
return this.LabelControl;
}
}
変更できるようになりました、と思ったのですが変更結果が*.Designer.csに反映されません。
上記ソースでは内在コントロールそのものをプロパティで公開していますが、
下記の様にControlCollectionで公開しても結果は同様でした。
public ControlCollection MyControls
{
get
{
return this.Controls;
}
}
長くなってしまいましたが、冒頭で述べましたように、内在コントロールの全プロパティ
を極少ないコーディング量で公開し、デザイナ上で設定可能にするには
どういった方法が考えられますでしょうか?または不可能なのでしょうか?
以上、よろしくお願いいたします。
回答
-
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] ですね
ユーザーコントロールの作成は私のページで恐縮ですが基本を書いてあります。
http://mnow.wankuma.com/index2f.html
http://mnow.wankuma.com/cs_usercontrol5.html
マイクロソフトのページもあります。
本当はこの下をじっくり読むのが良いんですが。
http://msdn2.microsoft.com/ja-jp/library/37899azc(VS.80).aspx
ここにこの件は書かれています。
http://msdn2.microsoft.com/ja-jp/library/a19191fh(VS.80).aspx
/// <summary>
/// ラベルコントロールを取得します。
/// </summary>
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public System.Windows.Forms.Label Label
{
set
{
this.LabelControl = value;
}
get
{
return this.LabelControl;
}
}
私としてはこのやり方はお勧めしていません。
こういうやり方でラベルコントロール全体を出してしまうとユーザーコントロールでいじってほしくない部分も、
変更されてしまう危険性があり後々トラブルの種です。
個人的に自分だけが使う場合を除いて仕事ではやらないほうがいいと思います。
ユーザーコントロールとしてバグの範囲の可能性が絞れないからです。
すべての返信
-
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] ですね
ユーザーコントロールの作成は私のページで恐縮ですが基本を書いてあります。
http://mnow.wankuma.com/index2f.html
http://mnow.wankuma.com/cs_usercontrol5.html
マイクロソフトのページもあります。
本当はこの下をじっくり読むのが良いんですが。
http://msdn2.microsoft.com/ja-jp/library/37899azc(VS.80).aspx
ここにこの件は書かれています。
http://msdn2.microsoft.com/ja-jp/library/a19191fh(VS.80).aspx
/// <summary>
/// ラベルコントロールを取得します。
/// </summary>
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public System.Windows.Forms.Label Label
{
set
{
this.LabelControl = value;
}
get
{
return this.LabelControl;
}
}
私としてはこのやり方はお勧めしていません。
こういうやり方でラベルコントロール全体を出してしまうとユーザーコントロールでいじってほしくない部分も、
変更されてしまう危険性があり後々トラブルの種です。
個人的に自分だけが使う場合を除いて仕事ではやらないほうがいいと思います。
ユーザーコントロールとしてバグの範囲の可能性が絞れないからです。