DataGridViewComboBoxColumn中的图标 [英] Icons in a 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屋!