トップ回答者
継承したTextBoxのデフォルトText値を指定したい

質問
-
TextBoxを継承し、Text値のデフォルトを設定したいと思いましたが、うまく実装できずに悩んでいます。
以下のようにTextアクセサをoverrideした上でDefaultValueを設定してみましたが、動作してくれません。
これも恐らく、TextBoxBaseDesignerにおいてTextプロパティを変更している関係で、DefaultValueから変更された、という状態になっているだけと思われます。public partial class Component1 : TextBox { [DefaultValue("0")] public override string Text { get { return base.Text; } set { base.Text = value; } } }
ControlDesignerを継承したクラスを利用し、InitializeNewComponent()でText値を変更すれば出来ましたが、TextBoxBaseDesignerでの処理が行われなくなる為、その方法以外で何とかしたいのですが、どうにかならないものでしょうか?
特定の条件に応じた値しか許可しないTextBoxを実装しようとしている為、デザイナに貼り付けた直後にText値が
空だと困るからどうにかしたい、というのが現在の困りごとになります。- 編集済み takiru 2013年3月27日 8:13
回答
-
普通にコンストラクタで初期値を設定してしまうのではダメ?
public partial class Component1 : TextBox { public Component1() { this.Text = "ABC"; } public override string Text { get { return base.Text; } set { if (IsComponentPaste) { return; } base.Text = value; } } private bool IsComponentPaste { get { string trace = Environment.StackTrace; return DesignMode && (trace.Contains("System.Windows.Forms.Design.ControlDesigner.InitializeNewComponent") || trace.Contains("System.Windows.Forms.Design.TextBoxBaseDesigner.InitializeNewComponent")); } } }
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
すべての返信
-
普通にコンストラクタで初期値を設定してしまうのではダメ?
public partial class Component1 : TextBox { public Component1() { this.Text = "ABC"; } public override string Text { get { return base.Text; } set { if (IsComponentPaste) { return; } base.Text = value; } } private bool IsComponentPaste { get { string trace = Environment.StackTrace; return DesignMode && (trace.Contains("System.Windows.Forms.Design.ControlDesigner.InitializeNewComponent") || trace.Contains("System.Windows.Forms.Design.TextBoxBaseDesigner.InitializeNewComponent")); } } }
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)