簡體   English   中英

按鈕列的DataGridView圖像

[英]DataGridView Image for Button Column

我正在嘗試將可點擊的圖像/按鈕添加到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";

如果最好使用一個圖像按鈕或一個可點擊的圖像,我就無法解決這個問題。 我也無法正確顯示按鈕。

謝謝Brad

在按鈕上顯示圖像

您可以添加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(someImage, new Rectangle(x, y, w, h));
        e.Handled = true;
    }
}

顯示沒有按鈕的圖像

要在包括新行的所有行上顯示單個圖像,可以設置DataGridViewImageColumnImage屬性。 這樣,圖像將顯示在所有行的列中:

dataGridView1.Columns.Add(new DataGridViewImageColumn(){
    Image = 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 = someImage;
}

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

處理點擊

要處理單擊圖像/按鈕,您可以處理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列時應該完全單擊圖像。

截圖

這是結果。 第一列是顯示圖像的按鈕列,第二列是設置為顯示單個圖像的普通圖像列:

在此輸入圖像描述

注意

在上面的例子中,我假設你在someImage成員變量中有一個圖像:

Image someImage = Properties.Resources.SomeImage

確保在處理表單時處理someImage

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM