color aus string in color umwandeln klappt nicht

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

    color aus string in color umwandeln klappt nicht

    hallo,
    ich möchte aus einem string der z.b. Black beinhaltet die hintergrundfarbe aus der enum Color in black setzen.
    nur leider funktioniert das nicht.
    es kommt der Fehler: Der Wert vom Typ "Integer" kann nicht in "System.Drawing.Color" konvertiert werden.
    bei: Me.BackColor = values(i)

    VB.NET-Quellcode

    1. Dim texts As String = ls.ToString.Replace("background-color: ", "")
    2. Dim colors() As String = [Enum].GetNames(GetType(Color))
    3. Dim values() As Integer = [Enum].GetValues(GetType(Color))
    4. For i As Integer = 0 To colors.Length - 1
    5. If colors(i) = texts Then
    6. Me.BackColor = values(i)
    7. End If
    8. Next i


    kann mir da jemand helfen?

    vielen dank

    *edit hbs herausgefunden. nur color ist leider eine structure. wie kann ich den code soanwenden nur mit einer structure?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „filmee24“ ()

    VB.NET-Quellcode

    1. Dim col1 As Color = Color.Aqua
    2. Dim icol As Integer = col1.ToArgb
    3. Dim col2 As Color = Color.FromArgb(icol)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hi
    es gibt "Spezialfarben", wie Systemfarben. Eine Color besteht nicht nur aus ARGB-Werten, sondern auch aus Namen usw. Genaueres kann man per

    VB.NET-Quellcode

    1. Dim sb As New System.Text.StringBuilder(1024)
    2. For Each fi As Reflection.FieldInfo In GetType(Color).GetFields(Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic)
    3. sb.Append(fi.Name).Append(": ").AppendLine(fi.FieldType.FullName)
    4. Next
    5. MessageBox.Show(sb.ToString())

    ermitteln. Die korrektere Version wäre das Instantiieren eines ColorConverters:

    VB.NET-Quellcode

    1. Private Shared ccvConverter As ColorConverter
    2. Public Shared ReadOnly Property Converter As ColorConverter
    3. Get
    4. If ccvConverter Is Nothing Then
    5. ccvConverter = New ColorConverter()
    6. End If
    7. Return ccvConverter
    8. End Get
    9. End Property
    10. Public Shared Function ColorToString(ByVal color As Color) As String
    11. Return Converter.ConvertToString(color)
    12. End Function
    13. Public Shared Function StringToColor(ByVal stringValue As String) As Color
    14. Return DirectCast(Converter.ConvertFromString(stringValue), Color)
    15. End Function


    Verwendungsbeispiel:

    VB.NET-Quellcode

    1. MessageBox.Show(String.Join(Environment.NewLine, _
    2. ColorToString(Color.Black), _
    3. ColorToString(SystemColors.Window), _
    4. Environment.NewLine, _
    5. StringToColor(ColorToString(Color.Black)).ToString(), _
    6. StringToColor(ColorToString(SystemColors.Window)).ToString()))


    Der Vorteil bei dieser Methode ist, dass sich bei einer Änderung der Farbdefinitionen, wie sie va. bei den Systemfarben auftreten können, eben dazu führt, dass nicht die alte Farbe übernommen wird.

    Gruß
    ~blaze~