トップ回答者
C# カスタムコントロール プロパティの初期値を変更する方法

質問
-
VisualStudio 2017 .Net 4.6.1での質問です。
カスタムコントロールを作成しているのですが、規定値の変更はわかりましたが
初期値の変更が分かりませんでしたので、ご教授お願いします。
デザイナにコントロールを貼り付けた時点で、該当の初期値が反映されているのが理想です。
// 例:radiobutton public class CustomRadioButton:RadioButton { // AutoResetの規定値をFalseとする。 [DefaultValue(false)] public override bool AutoSize { get { return base.AutoSize; } set { base.AutoSize = value; } } public CustomRadioButton() { this.AutoSize = false; // 初期値はfalseにしたい。 } }
上記のように実装したとしても、フォームで貼り付ける際には、初期値Trueで貼り付けられてしまいます。
よろしくお願いします。
※追記
Buttonの場合の継承はコンストラクタで初期化できました。
RadioButtonはなぜ・・・
- 編集済み mogja 2019年4月10日 8:32 追加
回答
-
ツールボックスから貼り付ける場合にVisualStudioのデザイナがコントロールのToolboxItemAttributeという属性をみて、インスタンスを作っているっぽいのですが、RadioButtonに設定されているAutoSizeToolboxItemというのがAutoSizeをtrueに設定しようとしてるみたいです。
ですからAutoSizeToolboxItemの継承元であるToolboxItemを使うように属性を上書きしてやれば、AutoSizeを変更されないので目的達成できるでしょう。
[System.ComponentModel.ToolboxItemAttribute(typeof(System.Drawing.Design.ToolboxItem))] public class CustomRadioButton : RadioButton { // AutoResetの規定値をFalseとする。 [DefaultValue(false)] public override bool AutoSize { get { return base.AutoSize; } set { base.AutoSize = value; } } protected override void OnAutoSizeChanged(EventArgs e) { base.OnAutoSizeChanged(e); } public CustomRadioButton() { this.AutoSize = false; // 初期値はfalseにしたい。 } }
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
すべての返信
-
ツールボックスから貼り付ける場合にVisualStudioのデザイナがコントロールのToolboxItemAttributeという属性をみて、インスタンスを作っているっぽいのですが、RadioButtonに設定されているAutoSizeToolboxItemというのがAutoSizeをtrueに設定しようとしてるみたいです。
ですからAutoSizeToolboxItemの継承元であるToolboxItemを使うように属性を上書きしてやれば、AutoSizeを変更されないので目的達成できるでしょう。
[System.ComponentModel.ToolboxItemAttribute(typeof(System.Drawing.Design.ToolboxItem))] public class CustomRadioButton : RadioButton { // AutoResetの規定値をFalseとする。 [DefaultValue(false)] public override bool AutoSize { get { return base.AutoSize; } set { base.AutoSize = value; } } protected override void OnAutoSizeChanged(EventArgs e) { base.OnAutoSizeChanged(e); } public CustomRadioButton() { this.AutoSize = false; // 初期値はfalseにしたい。 } }
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)