Я наблюдал некоторое нечетное поведение при работе с DataGridView внутри GroupBox. Я понимаю, что DataGridView использует свойства Ambient, которые наследуют стили, как описано здесь, однако я считаю, что при отображении во время разработки есть ошибка. Ниже перечислены шаги по воссозданию в Visual Studio 2013 (я также сделал это в VS2008 с теми же результатами):
Создайте новую форму. Создайте GroupBox и установите размер шрифта на 22. Создайте DataGridView внутри поля Group и добавьте три столбца (все настройки по умолчанию).
Заголовки столбцов DataGridView наследуют настройки шрифта GroupBox, как ожидалось:
Измените DataGridView1.EnableHeadersVisualStyles
на свойство False
и отредактируйте DataGridView1.ColumnHeadersDefaultCellStyle
. Установите Font
как Mistral, 9.75pt
. Теперь форма должна выглядеть так, как показано на рисунке, и при запуске приложения:
Теперь начинается веселье. Сохраните и закройте вкладку Form1 и заново откройте ее, дважды щелкнув форму в обозревателе решений. Теперь в представлении дизайна заголовок столбца изменился и, по-видимому, наследует настройку шрифта родительского GroupBox:
Однако, когда приложение запускается, заголовки используют правильные настройки шрифта:
Это ошибка с рендерингом проектного представления или я неправильно понимаю правила наследования?
Конечно, это похоже на ошибку с дизайнером. Я вижу тот же эффект в VS2013, хотя файл Designer.cs
сохраняет следующую строку:
dataGridViewCellStyle1.Font = new System.Drawing.Font("Mistral", 9.75F,
System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
Я не уверен, почему контроль внутри GroupBox
ведет себя таким образом, но есть обходной путь.
Поместите Panel
внутри GroupBox
, затем поместите элементы управления, такие как DataGridView
в Panel
.
Затем вы можете установить свойство Font
на Panel
и унаследовать его DataGridView
, или вы можете просто изменить стиль заголовка в сетке, и он будет отображаться правильно после закрытия/повторного открытия Form
.