datagridviewのセルフォントの変更をスピードアップ

私はよくテストしていて、問題はこれらのコードの100%の1つです(デバッグモードではっきりとわかります)。

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のために驚くべき時間がかかります!セルフォントの変更

1
これは再現できません。 最小限、完全、検証可能な例をご記入ください。
追加された 著者 Ahmed Abdelhameed,
あなたは正しい、ありがとう。私は "遅いメーカー" heheを見つけました
追加された 著者 Deniz,
あなたは正しい、ありがとう。私は "遅いメーカー" heheを見つけました
追加された 著者 Deniz,

4 答え

私はあなたのコードで好きではないのはあなたがすべての単一のセルのために 'new Font()'を使うということです。あなたのセルは同じフォントオブジェクトを共有できると思います。これで問題が解決するかどうかはわかりませんが、事前定義済みのFontクラス変数を作成してみてください。たとえば、WinFormsクラスのメンバー変数としていくつかのFontクラスのインスタンスを作成してから、既存のFont変数を参照するだけです。 Windows GDIでは、各フォントはハンドル(HFONT)を保持しています。ハンドル(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セルのスタイル全体を置き換えることもできます。

2
追加された
いいえ私はFont fontBold = nullを持っていました。 fontBold = new Font( "Microsoft Sans Serif"、11.5F、FontStyle.Bold); Form_Loadで一度だけ呼び出されます。まだありがとうございます:)
追加された 著者 Deniz,

私はあなたのコードで好きではないのはあなたがすべての単一のセルのために 'new Font()'を使うということです。あなたのセルは同じフォントオブジェクトを共有できると思います。これで問題が解決するかどうかはわかりませんが、事前定義済みのFontクラス変数を作成してみてください。たとえば、WinFormsクラスのメンバー変数としていくつかのFontクラスのインスタンスを作成してから、既存のFont変数を参照するだけです。 Windows GDIでは、各フォントはハンドル(HFONT)を保持しています。ハンドル(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セルのスタイル全体を置き換えることもできます。

2
追加された
いいえ私はFont fontBold = nullを持っていました。 fontBold = new Font( "Microsoft Sans Serif"、11.5F、FontStyle.Bold); Form_Loadで一度だけ呼び出されます。まだありがとうございます:)
追加された 著者 Deniz,

問題は dataGridView1のプロパティ AutoSizeColumnsMod = AllCells があることです。

私が必要としていますが、それはあらゆる変化でそれを呼び出します。 だから私は dataGridView1プロパティの中で以前と同じようにコードで一度だけプログラム的にそれを使います。

それでもすべてのアシスタントに感謝します。

1
追加された

問題は dataGridView1のプロパティ AutoSizeColumnsMod = AllCells があることです。

私が必要としていますが、それはあらゆる変化でそれを呼び出します。 だから私は dataGridView1プロパティの中で以前と同じようにコードで一度だけプログラム的にそれを使います。

それでもすべてのアシスタントに感謝します。

1
追加された