2

.Fontプロパティを定義していないが、フォームからフォント(名前、サイズ、スタイル)を継承しているラベルに.Font.Bold=Trueを設定する必要があります。そのために、フォームのデザイナーファイルから彼女の.Fontプロパティを消去します。

次に、このラベルのフォント名やサイズなどを定義せずに、このラベルのテキストを太字に設定する必要があります。

私は試してみます:

label6.Font.Bold = True

ただし、これは機能しません(Property .Font.Boldは読み取り専用です)。
このラベルのフォントを次のように設定した場合:

label6.Font = New Font(myfontname, 10, FontStyle.Bold, GraphicsUnit.Point)

次に、太字のテキストが表示されますが、ラベルはフォームのフォントサイズを継承しなくなります。

ここで、フォームのフォントの継承をラベルに保持しながら、そのようなラベルに太字のテキストを表示することは可能ですか?

4

1 に答える 1

5

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オブジェクトを作成すると、既に正しく設定されています。

于 2013-03-20T23:46:11.420 に答える