Ich habe eine Farbauswahl Combobox aus irgendeinem Code, den ich auf dieser Seite gefunden habe, erstellt, obwohl ich den Code jetzt nicht finden kann.Wie man die Auswahl einer Combobox von einem numerischen Wert auf eine benannte Farbe einstellt
-Code, die Farben zeichnen:
Private Sub cboColorPicker_DrawItem(ByVal sender As Object, ByVal e As DrawItemEventArgs) Handles cboColor.DrawItem, cboBackground.DrawItem
Dim g As Graphics
Dim ItemBrush As Brush
Dim ItemColor As Color
Dim ItemFont As Font
Dim ItemName As String
Dim rect As Rectangle
g = e.Graphics
rect = e.Bounds
If e.Index >= 0 Then
'Get item color name
ItemName = CType(sender, ComboBox).Items(e.Index).ToString
'Get instance a font to draw item name with this style
ItemFont = New Font("Arial", 9, FontStyle.Regular)
'Get instance color from item name
ItemColor = Color.FromName(ItemName)
'Get instance brush with Solid style to draw background
ItemBrush = New SolidBrush(ItemColor)
'Draw the item name
g.DrawString(ItemName, ItemFont, Brushes.Black, rect.X, rect.Top)
'Draw the background with my brush style and rectangle of item
g.FillRectangle(ItemBrush, rect.X, rect.Y, rect.Width, rect.Height)
End If
End Sub
ich bevölkern die Combobox wie folgt aus:
Private Sub PopulateColorCombo(ByVal cbo As ComboBox)
cbo.Items.Add("Black")
cbo.Items.Add("Blue")
cbo.Items.Add("Lime")
cbo.Items.Add("Cyan")
cbo.Items.Add("Red")
cbo.Items.Add("Fuchsia")
cbo.Items.Add("Yellow")
cbo.Items.Add("White")
cbo.Items.Add("Navy")
cbo.Items.Add("Green")
cbo.Items.Add("Teal")
cbo.Items.Add("Maroon")
cbo.Items.Add("Purple")
cbo.Items.Add("Olive")
cbo.Items.Add("Gray")
End Sub
Ich speichere den Wert in der Datenbank als int, zum Beispiel schwarz wird -16777216.
Dies ist Teil eines Formulars, mit dem der Benutzer einen Bericht anpassen kann. Ich möchte die Combo aktualisieren, wenn Daten geladen werden, um die Farbe basierend auf dem anzuzeigen, was in der Datenbank gespeichert wurde. Ich kann das anscheinend nicht tun.
sagen also die Daten, die ich laden, wie HDI.Color = -16777216
Color.FromArgb(HDI.Color).ToString = "Color [A=255, R=0, G=0, B=0]"
Color.FromArgb(HDI.Color).Name = "ff000000"
Aber ich kann nicht die tatsächliche Farbe Namen. Keine der folgenden Arbeiten.
cboColor.SelectedIndex = cboColor.FindStringExact(Color.FromArgb(HDI.Color).ToKnownColor.ToString)
cboColor.SelectedIndex = cboColor.FindStringExact(CType(Color.FromArgb(HDI.Color), Color).ToString)
cboColor.SelectedIndex = cboColor.FindStringExact(System.Drawing.ColorTranslator.FromHtml(Color.FromArgb(HDI.Color).Name).ToString)
Verwende ich die falsche Combobox für diese Aufgabe? Gibt es eine Möglichkeit, es zum Laufen zu bringen?
Ich wollte keinen Vollfarbwähler anbieten, weil sie nicht viele Farben verwenden werden, also habe ich versucht, es für die Benutzer einfach zu halten. Ich kann sogar die Farben um die Hälfte reduzieren.
EDIT: Beheben Sie die undichte Probleme.
Private Sub cboColorPicker_DrawItem (ByVal Absender als Gegenstand, ByVal e As DrawItemEventArgs) Griffe cboColor.DrawItem, cboBackground.DrawItem
Dim g As Graphics
Dim ItemColor As Color
Dim ItemName As String
Dim rect As Rectangle
g = e.Graphics
rect = e.Bounds
If e.Index >= 0 Then
'Get item color name
ItemName = CType(sender, ComboBox).Items(e.Index).ToString
'Get instance color from item name
ItemColor = Color.FromName(ItemName)
'Get instance brush with Solid style to draw background
Using ItemBrush = New SolidBrush(ItemColor)
'Draw the item name
g.DrawString(ItemName, DirectCast(sender, ComboBox).Font, Brushes.Black, rect.X, rect.Top)
'Draw the background with my brush style and rectangle of item
g.FillRectangle(ItemBrush, rect.X, rect.Y, rect.Width, rect.Height)
End Using
End If
End Sub
ich vermute, Sie den Code aus [Color Picker Combo Box] bekam (https://stackoverflow.com/a/25616698/719186). Sie fügen Ihrer Combobox "Zeichenfolgen" hinzu, also würde ich denken, dass Sie nur die "Zeichenfolge" in Ihrer Datenbank speichern würden. – LarsTech
Ihr Code ist undicht. Sie brauchen keine neue Schriftart für jeden Artikel. Stellen Sie die cbo auf die gewünschte Schriftart und verwenden Sie diese. Außerdem sollte der Pinsel entsorgt werden. – Plutonix
Speichern Sie den Wert "Color.ToArgb" nicht in der Datenbank, sondern speichern Sie den KnownColor-Enum-Wert. Auf diese Weise können Sie die KnownColor neu erstellen und auf ihren Namen zugreifen. – TnTinMn