質問者
フォームのInitializeComponentでコントロールのプロパティが自動設定されてしまう!

質問
-
イヨモです。
Windowsアプリケーションを開発を行っています。
現在、Labelを継承したカスタムコントロールを作成しています。
そこで、LabelのAutoSizeプロパティ値をデフォルトFalseに設定しようと考えています。
しかし、よくよくLabelコントロールのAutoSizeプロパティの概要をmsdnで読んだら、
元々「デフォルト値はFalse」と記述されていました。
しかし、Formのデザイン画面に、Labelコントロールを配置した際に、AutoSizeプロパティが変更されてしまいます。FormのInitializeComponentは何を元にコントロールのプロパティを変更しているのでしょうか。
知っている方がおられれば教えて頂けないでしょうか。
よろしくお願い致します。
すべての返信
-
イヨモ さんからの引用 現在、Labelを継承したカスタムコントロールを作成しています。
そこで、LabelのAutoSizeプロパティ値をデフォルトFalseに設定しようと考えています。
しかし、よくよくLabelコントロールのAutoSizeプロパティの概要をmsdnで読んだら、
元々「デフォルト値はFalse」と記述されていました。
しかし、Formのデザイン画面に、Labelコントロールを配置した際に、AutoSizeプロパティが変更されてしまいます。FormのInitializeComponentは何を元にコントロールのプロパティを変更しているのでしょうか。
既定値はFalseのようです。(プロパティウィンドウでTrueが太字でFalseが標準)
貼り付けたときにTrueになっているということはLabelクラスがコンストラクタで変更していることが考えられます。
で、既定値ではないので生成されると。確かにLabel.AutoSizeの説明だけ見ると混乱しますね。
-
既定値はFalseのようです。(プロパティウィンドウでTrueが太字でFalseが標準) 貼り付けたときにTrueになっているということはLabelクラスがコンストラクタで変更していることが考えられます。で、既定値ではないので生成されると。
まどかさん返事ありがとうございます。私も最初は、Labelクラスのコンストラクタで実装していると思ったのですが、
msdnのLabelのコンストラクタの解説を読むと、以下のように記述されていたので、
コンストラクタでプロパティの初期値が設定されている訳ではないのでは思うのですが、どうでしょうか?
※msdnのLabelコンストラクタの解説を抜粋。
「既定では、ラベルは AutoSize プロパティが false、および BorderStyle プロパティが BorderStyle.None に設定された状態で表示されます。」
-
横から失礼します。
true にしているのは、コンストラクタではないと思います。
一応、以下の実験でも確認できます。Label label = new Label();
label.Text = "TEST";
label.BackColor = Color.Yellow;
label.Parent = this;MessageBox.Show(label.AutoSize.ToString());
フォームに貼り付けると Text プロパティは自動的に "label1" 等になりますが、これと同じで、true になるのは IDE の親切心だと思います。
このようなものはおそらく他にもたくさんあるのではと思いますが、VS のバージョン等にも影響するかもしれず、今後もクラスライブラリのヘルプには書かれないんじゃないかと思います。