Подтвердить что ты не робот

Как сделать текст группы в блоке полужирным шрифтом, но не текст элементов управления, содержащихся в нем?

Я пошел и создал вкладку, содержащую большое количество элементов управления, большинство из которых содержатся в том, что я просто назову в блоке группы верхнего уровня. Теперь я решил, что текст группы верхнего уровня группы будет полужирным, но больше ничего. Однако, когда я устанавливаю шрифт группового окна верхнего уровня, выделенному полужирным шрифтом, все элементы управления, содержащиеся в нем, также выделяются жирным шрифтом, чего я не хочу. Я могу установить для каждого отдельного элемента управления bold значение false, но, похоже, должен быть более простой способ сделать это. Любые идеи?

Мне, вероятно, не хватает чего-то очевидного, как свойство группового ящика, которое смотрит мне в лицо - и извиниться, если это окажется так.

Заранее благодарим за помощь.

4b9b3361

Ответ 1

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

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

Ключ, конечно, по умолчанию. Свойства Ambient применимы только в том случае, если вы явно не задали свойствам детей другому. Если вы не хотите, чтобы дочерние элементы управления были выделены жирным шрифтом, выберите их все и отключите жирный шрифт. Настройки родителя/контейнера больше не будут отменять новые пользовательские настройки.

Чтобы сделать вещи еще проще, вы можете добавить элемент управления Panel в свой GroupBox, док-станцию ​​/привязать его для заполнения всей клиентской области элемента управления GroupBox и установить для него стандартный шрифт без жирного шрифта. Затем в правилах внешнего контроля указывается, что дочерний элемент управления, который вы добавляете в Panel, по умолчанию не будет полужирным. Таким образом, вам нужно изменить свойство шрифта одного элемента управления, а не каждого дочернего элемента управления, добавляемого в GroupBox.

Причина, по которой это лучше, чем попытка добавить элемент управления Label над заголовком GroupBox, заключается в том, что GroupBox предназначен для управления элементами управления. Вы можете использовать свойства стыковки и привязки, чтобы убедиться, что все правильно настроено, и вам не придется бороться с дизайнером, когда вы делаете это, чтобы убедиться, что ваша пользовательская метка правильно закрывает этикетку по умолчанию, нарисованную элементом управления GroupBox, Кроме того, вы не столкнетесь с проблемами Z-порядка или не столкнетесь с другими проблемами перерисовки с их уродливыми головами во время выполнения, когда, например, элемент управления Label случайно скрывается за GroupBox, и никто не может его увидеть (и множество других потенциальных snafus).

Ответ 2

Рассмотрим обход проблемы, поместив метку над текстовой областью GroupBox и сделайте шрифт ярлыка полужирным.

Я сделал это один раз и даже использовал CheckBox (для включения/отключения всей группы). Работали как шарм.

Ответ 3

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

Добавьте расширения в модуль следующим образом:

<Extension()>
Public Sub UnBold(Of T As Control)(cc As Control.ControlCollection)
    For Each c As Control In cc
        If Not TypeOf c Is T AndAlso c.GetType.GetProperty("Font") IsNot Nothing Then
            Dim RegularFont As New Font(c.Font.FontFamily, c.Font.Size, FontStyle.Regular)
            c.Font = RegularFont
        ElseIf c.HasChildren Then
            UnBold(Of T)(c.Controls)
        End If
    Next
End Sub

Затем отмените все элементы управления во всех GroupBox es в форме (включая любой дочерний элемент GroupBox es), используя в форме OnLoad событие:

Me.Controls.UnBold(Of GroupBox)()

Или для всех элементов управления в одном GroupBox (опять же, включая любой дочерний элемент GroupBox es):

MySpecificGroupBox.UnBold(Of GroupBox)()

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