开发者

Icons in a DataGridViewComboBoxColumn

开发者 https://www.devze.com 2022-12-12 16:56 出处:网络
I have a DataGridViewComboBoxColumn in my application that is defined as follows DataGridViewComboBoxColumn TransferActionCol = new 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.Al开发者_StackOverflow社区lCells;
fileListdataGridView.Columns.Add(TransferActionCol);

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.


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

EDIT: 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
0

精彩评论

暂无评论...
验证码 换一张
取 消