Я хочу добавить собственный шрифт в datagridview, но он не применяется, а применяется только к другим элементам, таким как метки.
Первоначально я попробовал это, и это сработало, как и ожидалось.
fontCollection.AddFontFile("./Resources/Circulitos.ttf");
Но потом я хотел попробовать встроенный файл, и шрифт не отображается правильно в datagridview, однако он отображается правильно в метке, которая у меня есть для тестирования. Это код, который у меня есть:
программа.cs
internal static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
static private List<PrivateFontCollection> _fontCollections;
[STAThread]
static void Main()
{
// To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(true);
Application.ApplicationExit += delegate {
if (_fontCollections != null)
{
foreach (var fc in _fontCollections) if (fc != null) fc.Dispose();
_fontCollections = null;
}
};
Application.Run(new Main());
}
static public Font GetCustomFont(byte[] fontData, float size, FontStyle style)
{
if (_fontCollections == null) _fontCollections = new List<PrivateFontCollection>();
PrivateFontCollection fontCol = new PrivateFontCollection();
IntPtr fontPtr = Marshal.AllocCoTaskMem(fontData.Length);
Marshal.Copy(fontData, 0, fontPtr, fontData.Length);
fontCol.AddMemoryFont(fontPtr, fontData.Length);
Marshal.FreeCoTaskMem(fontPtr);
_fontCollections.Add(fontCol);
return new Font(fontCol.Families[0], size, style);
}
}
Главный.cs
public partial class Main : Form
{
private PrivateFontCollection fontCollection;
private Font gf;
public Main()
{
gf = Program.GetCustomFont(Properties.Resources.Circulitos, 10, FontStyle.Regular);
InitializeComponent();
}
private void circulitos(int index, bool update)
{
dataGridView1.Columns[1].HeaderCell.Style.BackColor = Color.Green;
dataGridView1.DefaultCellStyle.Font = gf;
dataGridView1.ColumnHeadersDefaultCellStyle.Font = gf;
dataGridView1.RowHeadersDefaultCellStyle.Font = gf;
dataGridView1.EnableHeadersVisualStyles = false;
foreach (DataGridViewRow row in dataGridView1.Rows)
{
DataGridViewCell cell = row.Cells[1];
try
{
cell.Style.Font = gf;
}
catch
{
MessageBox.Show("Error fontCollection");
}
label5.Font = gf;
}
dataGridView1.Refresh();
dataGridView1.Invalidate();
}
}
Что я могу сделать, чтобы шрифт применялся к ячейкам datagridview, а не только к меткам? Спасибо за ваше время
Главный.cs
private void DataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.RowIndex >= 1 && e.ColumnIndex >= 0)
{
e.Handled = true;
e.PaintBackground(e.CellBounds, true);
e.Graphics.DrawString(e.FormattedValue.ToString(), customFont, Brushes.Black, e.CellBounds, StringFormat.GenericDefault);
e.Paint(e.CellBounds, DataGridViewPaintParts.Border);
}
}
Прочтите примечания здесь: Как правильно визуализировать встроенный шрифт?. Ознакомьтесь с пунктом 1, затем с абзацем ▶ (затем попробуйте
CellPainting
->FormattedValue
)