加快datagridview单元字体的更改

时间:2018-09-11 08:05:52

标签: c# winforms datagridview

我已经做了很多测试,问题是这些代码中的100%是其中之一(我可以在调试模式下清楚地看到它):

datagridview1.Rows[rowOld].Cells[cell].Style.Font = datagridview1.DefaultCellStyle.Font;

,如果我尝试使用其他代码更改字体也没关系,例如:

Font fontBold = null;
fontBold = new Font("Microsoft Sans Serif", 11.5F, FontStyle.Bold);
datagridview1.Rows[r].Cells[c].Style.Font = fontBold;

或:

datagridview1.Rows[r].Cells[c].Style.Font = new Font("Microsoft Sans Serif", 8.25F, FontStyle.Regular);

每个人大约需要800-1000毫秒。 那真是怪了?还是正常?

我的“ datagridview1”仅包含4000头母牛和7个细胞。 一切都很快,确实如此,但是如果我更改字体,仅需1个时间就可以了!单元字体更改。

2 个答案:

答案 0 :(得分:2)

我在您的代码中不喜欢的是您对每个单元格都使用“ new Font()”。我相信您的单元格可以共享相同的字体对象。我不确定这是否可以解决您的问题,但请尝试创建预定义的Font类变量。例如,创建一些Font类实例作为WinForms类的成员变量,然后仅引用现有的Font变量。在Windows GDI中,每种字体都具有句柄(HFONT),在使用完它之后必须将其丢弃。您在这里失去了一些表现。

例如:

private Font _fontArial = new Font("Arial", 8.25F, FontStyle.Regular);
private Font _fontArialBold = new Font("Arial", 8.25F, FontStyle.Bold);
private Font _fontTahoma = new Font("Tahoma", 8.25F, FontStyle.Regular);

然后只重用预定义的字体:

datagridview1.Rows[r].Cells[c].Style.Font = _fontArialBold;

还要注意,您可以创建预定义的样式,并替换DataGridView单元的整个样式,而不仅仅是字体。

答案 1 :(得分:1)

问题是我在 dataGridView1属性中具有 AutoSizeColumnsMod = AllCells

我需要,但是每次更改都会调用它。 因此,我仅在代码中以编程方式使用了它一次,而没有像以前那样在 dataGridView1属性中使用它。

仍然感谢每位助手。