23

Visual Studio 2008 で、DataGridView の列ヘッダーを太字にしようとしています。

プロパティ ボックスを使用して 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;
4

13 に答える 13

25

EnableHeadersVisualStyles の値を確認してみましたか?

MSDNによると:

ビジュアル スタイルが有効で、EnableHeadersVisualStyles が true に設定されている場合、TopLeftHeaderCell を除くすべてのヘッダー セルは現在のテーマを使用して描画され、ColumnHeadersDefaultCellStyle 値は無視されます。

于 2012-08-05T12:51:29.087 に答える
3

次のコードでXXXX.Designer.csを編集するだけでうまくいく回避策を見つけました。

this.receiptDetailView.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1;
this.receiptDetailView.ColumnHeadersDefaultCellStyle.Font = new System.Drawing.Font("Calibri", 9.75F, System.Drawing.FontStyle.Bold);
于 2012-08-07T07:15:24.127 に答える
2

フレームを追加することでこの問題を解決しました。私にとって、datagridview はグループボックス内にありました (ただし、他のいくつかのコンテナー タイプも同じでした)。

グループボックス内にパネルを配置し、そのパネルに適切なフォントを設定し、そのパネル内にデータグリッドビューを配置して、デフォルトでフォントを継承することで解決しました。

私はVS2010を使用しています

于 2013-07-17T16:53:40.143 に答える
2

これはバグのようですが、なぜ起こるのかはわかりません。私はあらゆる方法でそれをテストしましたが、設定されているかどうかに関係なく、値は親コントロールの値によってオーバーライドされます。これは、他のすべての WinForms (または他の UI フレームワーク) コントロールの動作とは逆であり、意味がありません。他のさまざまなコントロールもテストしましたが、これが発生する別のケースは見つかりませんでした。

ColumnHeadersDefaultCellStyle フォントは、Font プロパティが親コントロール (この場合はフォーム) に設定されていない場合にのみ重要です。

私は最も支持された回答に賞金を与えていますが、それはここで起こっていることではありません.

私が使用してきたこれに対する「解決策」は、フォームの読み込みイベントでフォントを再度設定することですが、そのようなコードはそこに属していないため、これは完全な解決策ではありません。

于 2012-08-07T09:23:57.447 に答える
2

この同じ問題に遭遇しました。ただし、私の dataGridView はグループボックスにあります。VS 2010 の再起動時に、dataGridView フォントは常に groupBox が設定されているものになります。間違いなく私が欲しいバグです。

于 2013-02-18T23:47:15.887 に答える
1

答えは実際には非常に簡単です。

フォントスタイルを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のフォント設定が上書きされます。

私のアドバイスは、フォームのフォント設定をデフォルトに戻すことです。

于 2012-08-07T08:48:16.423 に答える
1

このコードを使用

dataGridView1.EnableHeadersVisualStyles = false;
dataGridView1.SelectionBackColor = System.Drawing.SystemColors.Highlight;
于 2012-11-08T09:34:03.077 に答える
1

これはバグであり、.net 4.6 でもまだ存在します。問題は、ColumnHeadersDefaultCellStyleフォントが常にそのフォントによって上書きされるため、これを修正する方法を見つけました。

最初にDataGridViewを独自のPanelに追加する必要があります。Panelはここでシールドとして機能し、DataGridView の Dock プロパティを Fill に設定する必要があると思います。

次に、次のコードをColumnHeadersDefaultCellStyleChangedイベントに追加する必要があります。

 If Parent IsNot Nothing Then
       Parent.Font = ColumnHeadersDefaultCellStyle.Font
  End If
于 2019-03-16T01:29:07.463 に答える
0

私は今日同じ問題を抱えていました.DataGridViewのColumnHeadersDefaultCellStyleは、それが属するフォームのフォントスタイルによって上書きされているようです.

解決策として、フォームのフォントの GdiCharSet パラメータを 0 に設定しました。その後、ColumnHeadersDefaultCellStyle のフォントは上書きされません。

私はVS 2010とウィンドウ8を使用しています。

于 2013-05-09T10:14:48.450 に答える
0

あなたはそれを試すことができます。

Private Sub DgvListeFt_CellPainting(sender As Object, e As DataGridViewCellPaintingEventArgs) Handles DgvListeFt.CellPainting
    Call KolonBaslikDGV(sender, e)
End Sub
Sub KolonBaslikDGV(ByVal S As Object, ByVal E As DataGridViewCellPaintingEventArgs)
    E.PaintBackground(E.CellBounds, True)
    If E.RowIndex = -1 Then
        If E.Value Is Nothing Then
            E.Handled = True
            Return
        End If
        E.Handled = True

        Dim headerFont = New Font("Ariel", 9, FontStyle.Regular)
        Dim myBounds As Rectangle = E.CellBounds
        myBounds.X = E.CellBounds.X + 4
        Dim sf = New StringFormat With {.Alignment = StringAlignment.Near,
                                        .LineAlignment = StringAlignment.Center}
        E.Graphics.DrawString(E.Value.ToString, headerFont, Brushes.MediumVioletRed, myBounds, sf)
        headerFont.Dispose()
        sf.Dispose()
    End If
End Sub
于 2021-03-29T23:48:10.117 に答える
0

このトピックが古いことは知っていますが、VS 2015 で同じ問題が発生し、ColumnDefaultHeadersCellStyle のフォント サイズが常に 10pt に戻っていました (14pt にする必要がありました)。最初にフォント自体を変更することでこれを修正でき、次にフォントサイズを変更できるようになりました.

もともと使っていたフォントはSEGOE UI SEMIBOLDだったのですが、SEGOE UIだけに変えたらサイズも変えられるようになりました。半太字バージョンを使用するとサイズを変更できなかった理由を調べていません。さらに、このメソッドは、VisualStyles を有効にし、EnableHeadersVisualStyles を true に設定した場合に機能しました。

誰かがまだこの問題を抱えている場合は、別のフォントに変更してみてください。

于 2018-04-16T21:54:25.170 に答える