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

Почему мой ColumnHeadersDefaultCellStyle поддерживает reset в дизайнере Visual Studio?

Я пытаюсь сделать заголовки столбцов моего DataGridView полужирным, в Visual Studio 2008.

Каждый раз, когда я меняю свой ColumnHeadersDefaultCellStyle на Calibri 9.75pt жирным шрифтом, используя поле свойств, при следующем открытии сохраненной формы, ColumnHeadersDefaultCellStyle вернул Calibri 9.75 без жирного шрифта.

Моим шрифтом формы является Calibri 9.75 без жирного шрифта, как и мой стиль ячейки по умолчанию, но я должен уметь переопределять стиль ячейки по умолчанию с помощью моего стиля ColumnHeader?

Я могу решить эту проблему программно, установив стиль при отображении формы, но мы хотели бы, чтобы дизайнер Visual Studio показывал выделенные жирным шрифтом заголовки, поэтому мы можем соответствующим образом компоновать столбцы для пространства, взятого жирным текстом заголовка.

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

dataGridViewCellStyle1.Font = new System.Drawing.Font("Calibri", 9.75F,  
    System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText;
dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;
dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True;

this.receiptDetailView.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1;
4b9b3361

Ответ 1

Пробовали ли вы проверить значение EnableHeadersVisualStyles?

Согласно MSDN:

Если визуальные стили включены, а для параметра EnableHeadersVisualStyles установлено значение true, все элементы заголовка, кроме TopLeftHeaderCell, текущая тема и значения ColumnHeadersDefaultCellStyle игнорируются.

Ответ 2

Это ошибка, хотя Microsoft, вероятно, попытается назвать ее функцией. Ячейки заголовка DataGridView должны наследовать текущую тему только в том случае, если для параметра EnableHeadersVisualStyles установлено значение TRUE, и используйте параметры в столбце ColumnHeaderDefaultCellStyles, если он является ложным. Но DGV игнорирует EnableHeadersVisualStyles и всегда наследует шрифт родительского контейнера, в котором он находится.

Оба предложения rutlean и Nico Engler будут работать. Вот что я всегда делаю в качестве стандартной практики: поместите свой DGV в панель (в зависимости от вашего приложения вы можете захотеть установить свойство Dock для заполнения. Затем установите шрифт панели в нужные параметры. Теперь ваш DGV всегда будет наследовать эта настройка.

Ответ 3

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

Шрифт ColumnHeadersDefaultCellStyle имеет значение только в том случае, если свойство Font не установлено в родительском элементе управления (форма в этом случае).

Я даю щедрости самый лучший ответ, но это не то, что происходит здесь.

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

Ответ 4

Я столкнулся с этой проблемой. Однако мой dataGridView находится в групповом ящике. При перезапуске VS 2010 шрифты dataGridView всегда будут независимо от того, для чего установлен groupBox. Определенно ошибка, которую я бы хотел.

Ответ 5

Я решил эту проблему, добавив фрейм. Для меня datagridview находился внутри группового ящика (хотя некоторые другие типы контейнеров делали то же самое).

Решено, поместив панель внутри группового ящика, установите соответствующий шрифт на эту панель, поместите datagridview внутри этой панели и по умолчанию наследует шрифты.

Я использую VS2010

Ответ 6

Я нашел обходной путь, где просто редактирование XXXX.Designer.cs со следующим кодом делает трюк.

this.receiptDetailView.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1;
this.receiptDetailView.ColumnHeadersDefaultCellStyle.Font = new System.Drawing.Font("Calibri", 9.75F, System.Drawing.FontStyle.Bold);

Ответ 7

Ответ на самом деле довольно простой.

Вы устанавливаете стиль шрифта в Form1 [Arial; 8,25pt]. Давайте посмотрим на конструктора:

private void InitializeComponent()
    {
        System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
        this.dataGridView1 = new System.Windows.Forms.DataGridView();
        this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn();
        this.Column2 = new System.Windows.Forms.DataGridViewTextBoxColumn();
        this.Column3 = new System.Windows.Forms.DataGridViewTextBoxColumn();
        ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
        this.SuspendLayout();
        // 
        // dataGridView1
        // 
        dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
        dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control;
        dataGridViewCellStyle1.Font = new System.Drawing.Font("Calibri", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
        dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText;
        dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;
        dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
        dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
        this.dataGridView1.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1;
        this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
        this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
        this.Column1,
        this.Column2,
        this.Column3});
        this.dataGridView1.EnableHeadersVisualStyles = false;
        this.dataGridView1.Location = new System.Drawing.Point(49, 62);
        this.dataGridView1.Name = "dataGridView1";
        this.dataGridView1.Size = new System.Drawing.Size(443, 309);
        this.dataGridView1.TabIndex = 0;
        // 
        // Column1
        // 
        this.Column1.HeaderText = "Column1";
        this.Column1.Name = "Column1";
        // 
        // Column2
        // 
        this.Column2.HeaderText = "Column2";
        this.Column2.Name = "Column2";
        // 
        // Column3
        // 
        this.Column3.HeaderText = "Column3";
        this.Column3.Name = "Column3";
        // 
        // Form1
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 14F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.ClientSize = new System.Drawing.Size(546, 457);
        this.Controls.Add(this.dataGridView1);
        this.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));
        this.Name = "Form1";
        this.Text = "Form1";
        this.Load += new System.EventHandler(this.Form1_Load);
        ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
        this.ResumeLayout(false);

    }

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

Мой совет возвращает значение параметра шрифта формы по умолчанию.

Ответ 8

Используйте этот код

dataGridView1.EnableHeadersVisualStyles = false;
dataGridView1.SelectionBackColor = System.Drawing.SystemColors.Highlight;

Ответ 9

У меня была такая же проблема сегодня, и казалось, что ColumnHeadersDefaultCellStyle в DataGridView перезаписывается шрифтом стиля, к которому он принадлежит.

В качестве решения я установил параметр GdiCharSet шрифта формы равным 0. После этого шрифт ColumnHeadersDefaultCellStyle не будет перезаписан.

Я на VS 2010 и Window 8.