摘要:winform中表格會閃爍
如果在winform中放置一個datagridview,然後在CellFormatting的事件中寫更改表格底色或圖片的程式碼,如下所示
private void dgvBudgetLI_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex == 0)
{
dgvBudgetLI.Rows[e.RowIndex].Cells["StrKeyWord3"].Value = (Image)res.GetObject(this.listLastDeptYearBudgetI[e.RowIndex].StrBudDeptYearBudgetFilPath);
if (dgvBudgetLI.Rows[e.RowIndex].Cells["StrKeyWord3"].Value.ToString().Equals("S"))
{
dgvBudgetLI.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Pink;
}
else
{
dgvBudgetLI.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White;
}
}
}
這樣會造成當程式碼設定了datagridview的底色和圖片之後,又觸發了這個事件,如此造成了無窮迴圈,所以畫面會一直閃爍,而且如果有使用threadpool處裡多執行序的話,會造成無法預期的狀況發生,建議寫法改成
private void dgvBudgetLI_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex == 0)
{
e.Value = (Image)res.GetObject(this.listLastDeptYearBudgetI[e.RowIndex].StrBudDeptYearBudgetFilPath);
if (dgvBudgetLI.Rows[e.RowIndex].Cells["StrKeyWord3"].Value.ToString().Equals("S"))
{
dgvBudgetLI.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Pink;
}
else
{
dgvBudgetLI.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White;
}
}
}