2013-03-20 4 views
2

Мне нужно установить .Font.Bold = True на метке, которая не указала свойство .Font, но наследует шрифт (имя, размер, стиль) из формы. Для этого я стираю ее свойство .Font из файла конструктора формы.Установить Font.Bold на унаследованный ярлык

Теперь мне нужно установить текст этой метки, чтобы она была жирной, без определения имени шрифта, размера и т. Д. Для этой метки.

Стараюсь:

label6.Font.Bold = True 

Но это не работает (Property .Font.Bold доступен только для чтения).
Если установить шрифт для этого ярлыка, как:

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

тогда я жирный текст, но этикетка затем не размер шрифта унаследовать форме в больше.

Можно ли сохранить наследование шрифтов шрифта на этикетке, но получить жирный текст на такой этикетке?

ответ

5

Нет, поскольку вы уже обнаружили, что свойство Font.Bold доступно только для чтения. Объекты шрифта неизменяемы, что означает, что их свойства не могут быть изменены после их создания. Единственный способ изменить это свойство - создать новый объект Font.

При создании этого нового шрифта вы можете, конечно, скопировать свойства существующего объекта Font (например, тот, который используется вашей формой), но нет возможности динамически связывать два объекта Font вместе. Если размер шрифта, используемый вашей формой, изменится, новый объект Font будет создан с этим новым размером для формы, но ваш пользовательский полужирный объект Font не будет обновлен.

Единственное, что сбивает с толку, это то, что существует немного магии, которая продолжается, если вы не устанавливаете пользовательский шрифт для дочерних элементов управления. Они автоматически наследуют шрифт своего родителя (элемент управления контейнером, например, форма). Такие свойства, которые извлекают их значение из своего родителя, когда они не были явно установлены, называются свойствами окружающей среды. Свойства окружающей среды объясняются в the documentation, где это применимо. Но результатом является то, что окружающая среда уходит в том месте, где вы явно задали свойство. Так что забудь об этом.

Для достижения желаемого результата нам необходимо получить уведомление, когда размер шрифта формы изменится, и в ответ вы можете создать новый жирный шрифт с новым размером для вашего элемента управления Label. К счастью, есть такой механизм в виде FontChanged event. Обращайтесь к событию FontChanged для вашей формы и в ответ создайте новый объект Font для вашего элемента управления Label. Например:

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 

Хотя, я не уверен, если/почему это действительно необходимо. Редко, когда размер шрифта формы изменяется во время работы приложения. Как правило, это происходит только при создании, и в этом случае, когда вы извлекаете значение для создания пользовательского объекта Font для вашего элемента управления Label, оно уже будет установлено правильно.

+0

Hi Cody. Основываясь на вашей более ранней справке с центральным изменением размера шрифта формы с помощью мыши, я делаю это для всех форм в проекте. Но в одной форме, которая может иметь изменение шрифта «в любое время», поскольку присутствует мелодия мускулатуры, мне нужен жирный текст на этикетке. И теперь я получаю его под обработчиком _FontChanged, как вы говорите. Label6.Font = Новый шрифт (Me.Font.Name, Me.Font.Size, FontStyle.Bold, GraphicsUnit.Point). Большое спасибо за помощь и широкие объяснения. –

Смежные вопросы