Benutzer mit den meisten Antworten
ColorDialog erweitern

Frage
-
Hallo Leute,
mit dem Standard-ColorDialog kann ich ja nur RGB-Farben auswählen.
Ich möchte jetzt aber auch eine Auswahl der Gesamtenfarbpalette, also auch die Systemfarben und die Webfarben. So ähnlich wie im VBNet-Editor. Im Standarddialog ist das ja nun einmal nicht möglich.
Wie kann ich es aber erreichen, dass ich z. B. die Farbe und den Namen in einem Listview hinzufüge?
Hat vielleicht einer hierfür schon ein Beispiel?
Vielen Dank im voraus.
Gruß Ahmed
Antworten
-
Hallo Leute,
hier ist die Lösung:
http://www.activevb.de/tipps/vbnettipps/tipp0085.html
Funktioniert bei mir einwandfrei.
Gruß Ahmed
- Als Antwort markiert Elmar Boye Montag, 1. Oktober 2012 14:07
Alle Antworten
-
Hallo Leute,
hier ist die Lösung:
http://www.activevb.de/tipps/vbnettipps/tipp0085.html
Funktioniert bei mir einwandfrei.
Gruß Ahmed
- Als Antwort markiert Elmar Boye Montag, 1. Oktober 2012 14:07
-
Hallo, gucke mal hier. Wieder zurück wandeln kannst du das mittels Color.FromName. Das geht natürlich nur mit den Englischen Farbnahmen. Wenn du weitere haben willst, musst du Sie manuel abhandeln.
Koopakiller - http://koopakiller.ko.ohost.de/
-
Hallo Leute,
ich habe die ColorComboBox noch einmal um eine Property (SetColor) erweitert.
Damit kann man jetzt auch noch bestimmen, ob man
- 0=alle Systemfarben
- 1=nur Web
- 3=nur System
haben möchte. Wenn man die Klasse als Control in die Toolbox zieht und dann in dem Formular mit aufnimmt, kann man die Property leicht entsprechend abändern.
Hier meine Erweiterung:
Imports System.ComponentModel Public Class ComboBoxColors Inherits ComboBox Private m_DefaultColor As Color = Color.Aqua Private m_SetColor As Integer <Description("dargestellte Farbe bei Programmstart"), _ Category("Darstellung")> _ Public Property DefaultColor() As Color Get Return m_DefaultColor End Get Set(ByVal value As Color) m_DefaultColor = value End Set End Property Public Property SetColor() As Integer '0 = Alle '1 = nur Web '2 = nur System Get Return m_SetColor End Get Set(ByVal value As Integer) m_SetColor = value End Set End Property Public Sub New() Me.DrawMode = Windows.Forms.DrawMode.OwnerDrawFixed Me.DropDownStyle = ComboBoxStyle.DropDownList End Sub Private Sub LoadColors() ' Die KnownColors auslesen Dim ColorNames() As String = [Enum].GetNames(GetType(KnownColor)) 'For i As Integer = 27 To ColorNames.GetUpperBound(0) - 7 '^ohne Systemfarben '=mit allen Systemfarben Select Case SetColor Case 0 For i As Integer = ColorNames.GetLowerBound(0) To ColorNames.GetUpperBound(0) Me.Items.Add(ColorNames(i)) Next Case 1 For i As Integer = 27 To ColorNames.GetUpperBound(0) - 7 Me.Items.Add(ColorNames(i)) Next Case 2 For i As Integer = ColorNames.GetLowerBound(0) To 26 Me.Items.Add(ColorNames(i)) Next For i As Integer = ColorNames.GetUpperBound(0) - 6 To ColorNames.GetUpperBound(0) Me.Items.Add(ColorNames(i)) Next End Select End Sub ''' <summary> ''' Eintrag in Combo auswählen über die Bezeichnung der Farbe ''' </summary> ''' <param name="ColorName">Bezeichnung der Farbe</param> Public Sub SelectColorByName(ByVal ColorName As String) For i As Integer = 0 To Me.Items.Count - 1 If ColorName.ToUpper = Me.Items(i).ToString.ToUpper Then Me.SelectedIndex = i Exit For End If Next End Sub ''' <summary> ''' Eintrag in Combo auswählen über die Farbe ''' </summary> ''' <param name="Color">die Farbe</param> Public Sub SelectColor(ByVal Color As Color) For i As Integer = 0 To Me.Items.Count - 1 If Color.Name = Me.Items(i).ToString Then Me.SelectedIndex = i Exit For End If Next End Sub ''' <summary> ''' aktuell ausgewählte Farbe abrufen ''' </summary> Public Function SelectedColor() As Color Dim c As Color = Nothing If Me.SelectedIndex >= 0 Then c = Color.FromName(Me.SelectedItem.ToString) End If Return c End Function ''' <summary> ''' Bezeichnung der aktuell ausgewählten Farbe abrufen ''' </summary> Public Function SelectedColorName() As String Dim s As String = Nothing If Me.SelectedIndex >= 0 Then s = Me.SelectedItem.ToString End If Return s End Function ''' <summary> ''' (Erst)Aktivierung der Parentform ''' </summary> Protected Overrides Sub OnCreateControl() ' Die KnownColors auslesen If Not Me.DesignMode Then LoadColors() ' Die Defaultfarbe in der Combo auswählen If DefaultColor <> Nothing Then SelectColor(DefaultColor) End If End If MyBase.OnCreateControl() End Sub ''' <summary> ''' Ausklappen der Combo mit Anzeige der Items ''' </summary> Protected Overrides Sub OnDrawItem( _ ByVal e As System.Windows.Forms.DrawItemEventArgs) If e.Index >= 0 Then Dim Gr As Graphics = e.Graphics Dim x As Single = e.Bounds.Left Dim y As Single = e.Bounds.Top Dim h As Single = e.Bounds.Height Dim w As Single = h ' Farbe über Bezeichnung laden Using SB As New SolidBrush( _ Color.FromName(Me.Items(e.Index).ToString)) ' Ein gefülltes Rechteck zeichnen Gr.FillRectangle(SB, x + 2, y + 1, w, h - 4) Gr.DrawRectangle(Pens.Black, x + 2, y + 1, w, h - 4) ' Selected Item Invers, Not Selected Normal Using BR As New SolidBrush(Me.ForeColor) If CBool(e.State And DrawItemState.Selected) Then SB.Color = Color.DarkBlue BR.Color = Me.BackColor Else SB.Color = Me.BackColor End If Gr.FillRectangle(SB, w + 10, y, _ e.Bounds.Width - (w + 10), h - 1) Gr.DrawString(Me.Items.Item(e.Index).ToString, _ Me.Font, BR, w + 10, y) End Using End Using End If End Sub End Class
Das funktioniert jetzt genauso wie ich es mir vorgestellt habe.
Gruß Ahmed