DataGridViewComboBoxColumn中的图标 [英] Icons in a DataGridViewComboBoxColumn

查看:203
本文介绍了DataGridViewComboBoxColumn中的图标的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的应用程序中有一个DataGridViewComboBoxColumn定义如下

I have a DataGridViewComboBoxColumn in my application that is defined as follows

DataGridViewComboBoxColumn TransferActionCol = new DataGridViewComboBoxColumn();
TransferActionCol.DataSource = Enum.GetValues(typeof(TransferActionEnum));
TransferActionCol.DataPropertyName = "TransferAction";
TransferActionCol.Name = "Transfer Action";
TransferActionCol.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
fileListdataGridView.Columns.Add(TransferActionCol);

TransferActionEnum是一个包含值Download,Upload和Ignore的枚举。一切正常,但我想知道是否有办法在此列的单元格中显示图标而不是枚举文本值?如果可能的话,我想在用户进行选择时以及之后显示图标。

TransferActionEnum is an enumeration with values Download, Upload, and Ignore. Everything works fine, but I'd like to know if there is a way to display an icon in the cells of this column rather then the enum text value? If possible I'd like to display the icons both when the user is making a selection, and after.

推荐答案

MSDN答案工作?我会把翻译留给你:

Would this MSDN Answer work? I'll leave the translation to you:

编辑:C#版本在源页面可用。

C# version is available at the source page.

Private Sub Form1_Load(ByVal sender As System.Objec  t, ByVal e As System.EventArgs) Handles MyBase.Load  
    Dim cboColumn As DataGridViewComboBoxColumn  
    cboColumn = New DataGridViewComboBoxColumn  
    With cboColumn  
        .Name = "Color"  
        .Items.Add("Red")  
        .Items.Add("Blue")  
        .Items.Add("Green")  
    End With  
    Me.DataGridView1.Columns.Add(cboColumn)  
    Dim txtColumn As DataGridViewTextBoxColumn  
    txtColumn = New DataGridViewTextBoxColumn  
    With txtColumn  
        .Name = "Description"  
    End With  
    Me.DataGridView1.Columns.Add(txtColumn)  
End Sub

Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing
    If TypeOf e.Control Is ComboBox Then
        DirectCast(e.Control, ComboBox).DrawMode = DrawMode.OwnerDrawFixed
        Try
            RemoveHandler DirectCast(e.Control, ComboBox).DrawItem, AddressOf combobox1_DrawItem
        Catch ex As Exception

        End Try
        AddHandler DirectCast(e.Control, ComboBox).DrawItem, AddressOf combobox1_DrawItem
    End If
End Sub

Private Sub combobox1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs)
    Dim g As Graphics = e.Graphics
    Dim s As String
    Dim br As Brush = SystemBrushes.WindowText
    Dim brBack As Brush
    Dim rDraw As Rectangle
    Dim bSelected As Boolean = CBool(e.State And DrawItemState.Selected)
    Dim bValue As Boolean = CBool(e.State And DrawItemState.ComboBoxEdit)

    rDraw = e.Bounds
    rDraw.Inflate(-1, -1)

    If bSelected And Not bValue Then
        brBack = Brushes.LightBlue
        g.FillRectangle(Brushes.LightBlue, rDraw)
        g.DrawRectangle(Pens.Blue, rDraw)
    Else
        brBack = Brushes.White
        g.FillRectangle(brBack, e.Bounds)
    End If

    br = Nothing
    brBack = Nothing
    rDraw = Nothing

    Try
        s = DirectCast(sender, ComboBox).Items.Item(e.Index).ToString
    Catch
        s = ""
    End Try

    Dim x, y As Integer

    x = e.Bounds.Left + 25
    y = e.Bounds.Top + 1
    Dim c As Color
    Dim b As SolidBrush
    c = Color.FromName(s)
    b = New SolidBrush(c)

    g.FillRectangle(b, x - 20, y + 2, 10, 10)
    g.DrawString(s, DataGridView1.Font, Brushes.Black, x, y)
End Sub

这篇关于DataGridViewComboBoxColumn中的图标的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆