Ускорение изменения шрифта ячейки в datagridview - PullRequest
0 голосов
/ 11 сентября 2018

Я много тестирую, и проблема в том, что 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 голосов
/ 11 сентября 2018

Проблема была в том, что у меня было AutoSizeColumnsMod = AllCells в свойствах dataGridView1 .

Что мне нужно, но он вызывается при каждом изменении.Поэтому я использую это только один раз программно в коде, а не как прежде в свойствах dataGridView1 .

Тем не менее, спасибо за каждого помощника.

0 голосов
/ 11 сентября 2018

Что мне не нравится в вашем коде, так это то, что вы используете '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, а не только шрифты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...