| 2019/07/04(Thu) 15:29:28 編集(投稿者)
■No91540 (kiku さん) に返信 > textBox1.Font = f1; > 上記のsetterで新しいインスタンスが生成されるという > ことは考えられないでしょうか?
仮に setter でインスタンスが生成されていたとしても、 それと別に、getter で毎回生成されていることは間違いないかと。
using (var txt = new TextBox()) { // CE 環境においては "違う" らしい MessageBox.Show(ReferenceEquals(txt.Font, txt.Font) ? "同じ" : "違う"); } using (var txt = new TextBox { Font = null }) { // "not null" と表示される MessageBox.Show((txt.Font == null) ? "null" : "not null"); }
■No91539 (魔界の仮面弁士) に追記 > var f1 = new Font(FontFamily.GenericMonospace, 12, FontStyle.Regular); > var f2 = new Font(FontFamily.GenericMonospace, 12, FontStyle.Regular); > f2.Dispose(); > button1.Font = f1; > button2.Font = f2; > button1.Font.Dispose(); > > .NET Compact Framework の場合は、button1 だけが新しいフォントになります。 > button2 の方は以前のフォントのままレンダリングされていました。
違ってました。
デザイン時に別のフォントを指定してから実行してみると、 button2 のフォントが変化する様子が確認できたので、 button2 が「以前のフォントのまま」で変化しないという推察は誤りですね。
Control.Font プロパティに「Dispose 済みの Font」や「null」が渡された場合、 『既定のフォントがセットされる』という動作になっているようです。 |