2016-03-27 94 views
2

我試圖添加一個可點擊的圖像/按鈕到datagridview按鈕列。按鈕列DataGridView圖像

圖像/按鈕將成爲播放或停止的圖標。如果用戶點擊播放按鈕,則啓動系統上的服務,如果用戶單擊停止按鈕,服務將停止。

我已經編寫了啓動和停止服務的函數。我遇到的困難是讓按鈕/圖像顯示在數據網格中並使其可點擊。

這裏就是我有下面的代碼:

this.dgrdServices.RowPrePaint +=new DataGridViewRowPrePaintEventHandler(dgv_RowPrePaint); 
this.dgrdServices.Rows.Add(); 
this.dgrdServices.Rows[0].Cells[0].Value = Image.FromFile(@"C:\users\brad\desktop\green-dot.gif"); 
this.dgrdServices.Rows[0].Cells[1].Value = "MyServer"; 
this.dgrdServices.Rows[0].Cells[2].Value = "MyService"; 
this.dgrdServices.Rows[0].Cells[3].Value = "Started"; 
this.dgrdServices.Rows[0].Cells[4].Value = new DataGridViewButtonCell(); 
this.dgrdServices.Rows[0].Cells[5].Value = "Uninstall"; 

我不能工作了,如果這將是最好使用一個按鈕,用於爲圖像或只是那是可點擊的圖像。我也無法讓按鈕正確顯示。

感謝 布拉德

+0

http://www.codeproject.com/KB/grid/DGV_ImageButtonCell.aspx – MethodMan

+0

所以,當你說它沒有正確顯示時,它是否根本沒有出現?它顯示,但顯示器有問題嗎? – Jace

+0

我已經嘗試了各種可以找到的示例代碼。我最終會看到一個沒有標籤的灰色按鈕,或者是一個灰色的按鈕,上面寫着windows.system.bitmap。當我按下按鈕來調用啓動/停止服務的功能時,我也無法解決問題。 – Brad

回答

5

顯示圖像在按鈕

您可以添加一個DataGridViewButtonColumn,然後處理CellPainting事件電網,並檢查是否引發該事件爲您的按鈕欄,然後繪製圖像在上面。在活動結束時,不要忘記設置e.Handled = true;

在下面的代碼中,我認爲你有一個像SomeImage的圖像資源:

private void grid_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) 
{ 
    if (e.RowIndex < 0) 
     return; 

    //I supposed your button column is at index 0 
    if (e.ColumnIndex == 0) 
    { 
     e.Paint(e.CellBounds, DataGridViewPaintParts.All); 

     var w = Properties.Resources.SomeImage.Width; 
     var h = Properties.Resources.SomeImage.Height; 
     var x = e.CellBounds.Left + (e.CellBounds.Width - w)/2; 
     var y = e.CellBounds.Top + (e.CellBounds.Height - h)/2; 

     e.Graphics.DrawImage(Properties.Resources.SomeImage, new Rectangle(x, y, w, h)); 
     e.Handled = true; 
    } 
} 

顯示圖像,而按鈕

要顯示所有列的單個圖像,包括新行,您可以設置DataGridViewImageColumnImage財產。這樣,圖像將在該列顯示在所有行中:如果你可能想爲細胞不同的圖像

dataGridView1.Columns.Add(new DataGridViewImageColumn(){ 
    Image = Properties.Resources.SomeImage, Name = "someName", HeaderText = "Some Text" 
}); 

此外,您還可以在CellFormatting事件設置的DataGridViewImageColumn格式化的值:

void grid_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
{ 
    if (e.RowIndex < 0) 
     return; 

    //I supposed the image column is at index 1 
    if (e.ColumnIndex == 1) 
     e.Value = Properties.Resources.SomeImage; 
} 

您還可以將DataGridViewImageColumnImage屬性設置爲圖像,但圖像不會顯示在新行上。

手柄點擊

要處理點擊圖片/按鈕,您可以處理CellClickCellContentClick事件:

void grid_CellClick(object sender, DataGridViewCellEventArgs e) 
{ 
    if (e.RowIndex < 0) 
     return; 

    //I suposed you want to handle the event for column at index 1 
    if (e.ColumnIndex == 1) 
     MessageBox.Show("Clicked!"); 
} 

如果處理CellContentClick你應該對圖像準確點擊,當你使用image列。

截圖

下面是結果。第一列是示出圖像和第二列的按鈕列是一個正常的圖像列設定爲顯示單個圖像:

enter image description here

+0

我得到了這個工作,但有幾個意見 - 現在我看到一個按鈕上面有一個圖像。我真正想看到的只是形象。圖片需要點擊。 – Brad

+0

它是一個按鈕列,顯示您正在查找的圖像*我正在嘗試將一個可點擊的圖像/按鈕添加到datagridview按鈕列中* –

+0

如果您只需要圖像,則可以簡單地使用「DataGridViewImageColumn」 。 –