羊羊羊 发表于 2024-8-31 17:40:18

CAD颜色下拉框 可以用C#下拉列表框combobox实现吗


断崖 发表于 2024-9-1 16:18:57


你有种再说一遍 发表于 2024-8-31 19:44:20

这种四代目不是做了吗?

羊羊羊 发表于 2024-9-1 03:12:29

在啦里,呀,没找到亚

Dani1988 发表于 2024-9-1 13:31:49

Graphics.FillRectangleGraphics.DrawRectangle

XPG 发表于 2024-9-3 21:02:10

厉害啊,这个好。

羊羊羊 发表于 2024-11-12 01:17:44

厉害,厉害

羊羊羊 发表于 2024-11-15 20:19:11

我也会了,谢谢啦

pmq 发表于 2025-2-2 15:59:22

Private Sub Zsbd_Load(sender As Object, e As EventArgs) Handles MyBase.Load
   
   ' 设置 ComboBox 的 DrawMode 为 OwnerDrawFixed
   cmbColors.DrawMode = DrawMode.OwnerDrawFixed

   ' 加载颜色到下拉框
   LoadColors()
   
End Sub

Private Sub LoadColors()
   ' 示例颜色以及对应的中文名称
   Dim colorItems As (Color, String)() = {
         (Color.Red, "红"),
         (Color.Yellow, "黄"),
         (Color.Green, "绿"),
         (Color.Cyan, "青"),
         (Color.Blue, "蓝"),
         (Color.Magenta, "洋红"),
         (Color.Black, "黑白")
      }

   ' 添加颜色项到下拉框
   For Each item In colorItems
         cmbColors.Items.Add(New ColorItem(item.Item1, item.Item2))
   Next

   ' 设置下拉框默认选择项
   If cmbColors.Items.Count > 0 Then
         cmbColors.SelectedIndex = 0
   End If
End Sub

Private Sub CmbColors_DrawItem(sender As Object, e As DrawItemEventArgs) Handles cmbColors.DrawItem
   ' 确保索引是有效的
   If e.Index < 0 Then Return

   ' 获取当前项
   Dim item As ColorItem = CType(cmbColors.Items(e.Index), ColorItem)

   ' 绘制背景
   e.DrawBackground()

   ' 绘制颜色矩形
   Dim colorRect As Rectangle = New Rectangle(e.Bounds.Left + 2, e.Bounds.Top + 2, 20, e.Bounds.Height - 4)
   Using brush As New SolidBrush(item.Color)
         e.Graphics.FillRectangle(brush, colorRect)
   End Using

   ' 绘制颜色矩形的边框
   Using pen As New Pen(Color.Black)
         e.Graphics.DrawRectangle(pen, colorRect)
   End Using

   ' 绘制颜色名称
   Using brush As New SolidBrush(e.ForeColor)
         e.Graphics.DrawString(item.ColorName, e.Font, brush, e.Bounds.Left + 26, e.Bounds.Top + 2)
   End Using

   ' 绘制焦点矩形
   e.DrawFocusRectangle()
End Sub

' 自定义颜色项类
Private Class ColorItem
   Public Property Color As Color
   Public Property ColorName As String

   Public Sub New(color As Color, colorName As String)
         Me.Color = color
         Me.ColorName = colorName
   End Sub

   Public Overrides Function ToString() As String
         Return ColorName
   End Function

End Class

77077 发表于 2025-3-22 21:32:33

重绘下拉就行了。
页: [1]
查看完整版本: CAD颜色下拉框 可以用C#下拉列表框combobox实现吗