Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied! <p>Would this <a href="https://social.msdn.microsoft.com/forums/windows/en-US/1f41f16d-17a9-4c52-92cf-3de9426a2dd7/image-inside-datagridviewcomboboxcell" rel="nofollow noreferrer">MSDN Answer</a> work? I'll leave the translation to you:</p> <p>EDIT: C# version is available at the source page.</p> <pre class="lang-vb prettyprint-override"><code>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 </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload