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

  • 質問

  • イヨモです。

    Windowsアプリケーションを開発を行っています。

    現在、Labelを継承したカスタムコントロールを作成しています。

    そこで、LabelのAutoSizeプロパティ値をデフォルトFalseに設定しようと考えています。

    しかし、よくよくLabelコントロールのAutoSizeプロパティの概要をmsdnで読んだら、

    元々「デフォルト値はFalse」と記述されていました。

    しかし、Formのデザイン画面に、Labelコントロールを配置した際に、AutoSizeプロパティが変更されてしまいます。FormのInitializeComponentは何を元にコントロールのプロパティを変更しているのでしょうか。

    知っている方がおられれば教えて頂けないでしょうか。

    よろしくお願い致します。

    2006年9月7日 5:19

すべての返信

  •  イヨモ さんからの引用

    現在、Labelを継承したカスタムコントロールを作成しています。

    そこで、LabelのAutoSizeプロパティ値をデフォルトFalseに設定しようと考えています。

    しかし、よくよくLabelコントロールのAutoSizeプロパティの概要をmsdnで読んだら、

    元々「デフォルト値はFalse」と記述されていました。

    しかし、Formのデザイン画面に、Labelコントロールを配置した際に、AutoSizeプロパティが変更されてしまいます。FormのInitializeComponentは何を元にコントロールのプロパティを変更しているのでしょうか。

    既定値はFalseのようです。(プロパティウィンドウでTrueが太字でFalseが標準)
    貼り付けたときにTrueになっているということはLabelクラスがコンストラクタで変更していることが考えられます。
    で、既定値ではないので生成されると。

    確かにLabel.AutoSizeの説明だけ見ると混乱しますね。

    2006年9月7日 7:11
  •  


    既定値はFalseのようです。(プロパティウィンドウでTrueが太字でFalseが標準) 貼り付けたときにTrueになっているということはLabelクラスがコンストラクタで変更していることが考えられます。で、既定値ではないので生成されると。
    まどかさん返事ありがとうございます。

    私も最初は、Labelクラスのコンストラクタで実装していると思ったのですが、

    msdnのLabelのコンストラクタの解説を読むと、以下のように記述されていたので、

    コンストラクタでプロパティの初期値が設定されている訳ではないのでは思うのですが、どうでしょうか?

    ※msdnのLabelコンストラクタの解説を抜粋。

    「既定では、ラベルは AutoSize プロパティが false、および BorderStyle プロパティが BorderStyle.None に設定された状態で表示されます。」

    2006年9月7日 10:34
  • 横から失礼します。
    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 のバージョン等にも影響するかもしれず、今後もクラスライブラリのヘルプには書かれないんじゃないかと思います。

    2006年9月7日 11:05
  •  TH01 さんからの引用

    true にしているのは、コンストラクタではないと思います。

    ですよね。
    「既定値」の意味無くなりますし。

     

    2006年9月7日 15:08
  •  まどか さんからの引用
    ですよね。
    「既定値」の意味無くなりますし。

    「既定値」 と 「初期値」 は異なるものです。
    実際、異ならせることができます。

    「コンストラクタが設定しているわけではない」 は、正解なんですけどね。

    2006年9月8日 0:24
  •  じゃんぬねっと さんからの引用

    「既定値」 と 「初期値」 は異なるものです。

    いつもこの言葉を聞くと一瞬考え込んでしまう。。。
    冷静に"DefaultValue"を考えれば、うんうん。

     

    2006年9月8日 2:33
  • Initial value と Default value...

    日本だと 「デフォルト == 初期値」 的な使い方をする方が多いですからね。
    確かにややこしいように感じます。

    2006年9月8日 6:30