1. 程式人生 > >C# Winform 小技巧(Datagridview某一列按狀態顯示不同圖片)

C# Winform 小技巧(Datagridview某一列按狀態顯示不同圖片)

步驟:

一、匯入狀態圖片到專案中:

二、在窗體中宣告一個圖片陣列,並在窗體的OnLoad事件中加入圖片資源:

/// <summary>
/// 儲存狀態圖片序列,避免同一狀態對圖片重複讀取引發閃爍。
/// </summary>
private Image[] StatusImgs;

private void FrmSer_Main_Load(object sender, EventArgs e)
{

StatusImgs = new Image[] { Resources.TaskNA, Resources.TaskPause, Resources.TaskRun, Resources.TaskStart, Resources.TaskStop, Resources.TaskTimer };

}

三、處理Datgridview的格式化事件:

        private void DgvTaskList_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {

            if (DgvTaskList.Rows[e.RowIndex].IsNewRow) return;
            if (e.ColumnIndex != 0) return;

            string stas =OPString.NZ2Str(DgvTaskList.Rows[e.RowIndex].Cells["RunStatus"].Value);
            if (string.IsNullOrEmpty(stas)) stas = "Timer";
            try
            {
                DataGridViewImageCell tmpCell = (DataGridViewImageCell)DgvTaskList.Rows[e.RowIndex].Cells["StatusImg"];

                switch (stas)
                {
                    case "NA":
                        tmpCell.Value = StatusImgs[0];
                        tmpCell.ToolTipText = "閒置";
                        break;
                    case "Pause":
                        tmpCell.Value = StatusImgs[1];
                        tmpCell.ToolTipText = "暫停";
                        break;
                    case "Run":
                        tmpCell.Value = StatusImgs[2];
                        tmpCell.ToolTipText = "執行中";
                        break;
                    case "Start":
                        tmpCell.Value = StatusImgs[3];
                        tmpCell.ToolTipText = "解析中";
                        break;
                    case "Stop":
                        tmpCell.Value = StatusImgs[4];
                        tmpCell.ToolTipText = "任務終止";
                        break;
                    case "Timer":
                        tmpCell.Value = StatusImgs[5];
                        tmpCell.ToolTipText = "循檢中";
                        break;
                    default:
                        tmpCell.ToolTipText = "循檢中";
                        break;
                }
            }
            catch (Exception)
            {
            }
        }

  這樣,你就能得到一個沒有閃爍的狀態圖片列了。