Font.Bold
いいえ、プロパティが読み取り専用であることはすでにご存知のとおりです。フォントオブジェクトは不変です。つまり、一度作成したフォントオブジェクトは変更できません。このプロパティを変更する唯一の方法は、新しいFontオブジェクトを作成することです。
この新しいフォントを作成するときは、既存のフォントオブジェクト(フォームで使用されているものなど)のプロパティを確実にコピーできますが、2つのフォントオブジェクトを動的に結合する方法はありません。フォームで使用されるフォントサイズが変更された場合、フォームの新しいサイズで新しいFontオブジェクトが作成されますが、カスタムの太字のFontオブジェクトは更新されません。
これを混乱させる唯一のことは、子コントロールのカスタムフォントを設定しない場合に、少し魔法がかかることです。親のフォント(フォームなどのコンテナコントロール)を自動的に継承します。明示的に設定されていないときに親から値を取得するこのようなプロパティは、アンビエントプロパティと呼ばれます。周囲の特性は、該当する場合はドキュメントで説明されています。ただし、結果として、プロパティを明示的に設定した時点で雰囲気がなくなります。だからそれを忘れてください。
目的を達成するには、フォームのフォントサイズが変更されたときに通知を受け取る必要があります。それに応じて、Labelコントロールの新しいサイズで新しい太字のFontオブジェクトを作成できます。幸いなことに、FontChanged
イベントという形でそのようなメカニズムがあります。フォームのイベントを処理しFontChanged
、それに応じて、Labelコントロールの新しいFontオブジェクトを作成します。例えば:
Private Sub myForm_FontChanged(ByVal sender As Object, ByVal e As EventArgs) Handles myForm.FontChanged
Dim oldFont As Font = myLabel.Font
myLabel.Font = New Font(myForm.Font, myForm.Font.Style Or FontStyle.Bold)
oldFont.Dispose()
End Sub
しかし、これが本当に必要かどうか/なぜ必要かはわかりません。アプリケーションの実行中にフォームのフォントサイズが変更されることはめったにありません。通常、これは作成時にのみ発生します。この場合、値を取得してLabelコントロールのカスタムFontオブジェクトを作成すると、既に正しく設定されています。