Colordialog als Setting

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von FloFuchs.

    Colordialog als Setting

    Moin zusammen.
    Auf der Suche nach der Möglichkeit ein Integerarray als setting zu speichern, bin ich darüber gestolpert dass ich ja auch direkt einen Colordialog nehmen könnte als setting. So eingebaut aber nu das Problem.. wie weise ich dem ein Wert zu... weil folgender Code ergibt ja logischerweise diese Fehlermeldung: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

    VB.NET-Quellcode

    1. Using test As ColorDialog = My.Settings.ColorSet
    2. If test.ShowDialog() = DialogResult.OK Then
    3. Label1.BackColor = test.Color
    4. My.Settings.Save()
    5. End If
    6. End Using

    da ich nich weiß was ich in dem setting für einen wert eingeben soll.
    Hat da jemand ne Idee für mich?
    Bilder
    • VBColorSet.gif

      74,03 kB, 855×271, 179 mal angesehen
    Es macht keinen Sinn, ein Steuerelement (XyzDialog) zu speichern, sondern nur die ausgewählte Werte.
    Erst wenn man den Wert ändern will, erstellt man eine Instanz des dafür vorgesehenen Steuerelementes, um einen neuen Wert auszuwählen. Beispiel:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    2. If My.Settings.FormBackgroundColor = Nothing Then
    3. Using dlgColor As New ColorDialog
    4. If dlgColor.ShowDialog = Windows.Forms.DialogResult.OK Then My.Settings.FormBackgroundColor = dlgColor.Color
    5. End Using
    6. End If
    7. Me.BackColor = My.Settings.FormBackgroundColor
    8. End Sub
    Einen Dialog als Setting? Bist du dir sicher?
    Was spricht dagegen, die Color zu speichern und denn ganz nomal den Colordialog zu verwenden um ne andere Farbe zu speichern.

    Fiel Fergnügen

    Vatter

    also wie Vorposter schon sagte...
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Es geht darum dass ich ja im Colordialog neue Farben malen kann. Diese möchte ich abspeichern.
    Das wollte ich eigentlich als integerarray machen. Bin bei der Suche halt darüber gestolpert, dass man auch direkt einen Colordialog als setting nehmen kann.
    Wenn ich mir mit allem sicher wäre, würde der Code laufen ;)
    nix spricht dagegen. habe halt kein array als setting gefunden... vielleicht an der falschen stelle gesucht.
    Das mit dem instanzieren is klar.. wie ich im ersten post schon geschrieben hab.. das mir klar is dass die fehlermeldung kommt.
    Probier mal dies:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. My.Settings.Reload()
    3. Using dlg As ColorDialog = New ColorDialog
    4. dlg.Color = My.Settings.MyColor ' dieses Setting anlegen
    5. If dlg.ShowDialog() = DialogResult.OK Then
    6. Label1.BackColor = dlg.Color
    7. My.Settings.MyColor = dlg.Color
    8. My.Settings.Save()
    9. End If
    10. End Using
    11. End Sub
    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!

    FloFuchs schrieb:

    habe halt kein array als setting gefunden
    Doch gibbetes: ...Stringcollection.
    Du willst offenbar eine "Farbenpalette" speichern. Für Colors gibts ne ToString und Fromstring Methode zu Umwandeln einer Color in String und zurück. Das kannste in eine Stringcollection packen.

    Fiel Fergnügen

    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    @RodFromGermany
    Das war mein erster gedanke... allerdings brauche ich ja dann bis zu 10 Settings... das is mir zuviel
    @Vatter
    Ja die hab ich gefunden. Allerdings wollte ich halt nich die ganze zeit rumkonvertieren. :D
    Aber wenns denn dann keine andere Möglichkeit gibt... dann soll es wohl so sein.
    Danke Euch

    FloFuchs schrieb:

    Allerdings wollte ich halt nich die ganze zeit rumkonvertieren.
    Sind aber jeweils 1-Zeiler. Oder du hast ne feste anzahl Farben, dass isses ja auch einfach.

    @ ThuCommix,
    Txt-dateien findich gräußlich, dieses Splitten und zusammenpressen. dann schon lieber ne Datatable und .WriteXML/ReadXML

    Fiel Grütze

    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:

    VB.NET-Quellcode

    1. Using dlg As New ColorDialog
    2. Dim colTemp As New List(Of Integer)
    3. For Each colInt In My.Settings.ColorSet
    4. colTemp.Add(Integer.Parse(colInt))
    5. Next
    6. dlg.CustomColors = colTemp.ToArray
    7. If dlg.ShowDialog = DialogResult.OK Then
    8. With My.Settings
    9. .ColorSet.Clear()
    10. For Each col In dlg.CustomColors
    11. .ColorSet.Add(col.ToString)
    12. Next
    13. .Save()
    14. End With
    15. End If
    16. End Using

    so sieht das ganze nun aus. Falls es jemand sehen will...
    aber so richtig zufrieden bin ich damit noch nich...
    speziell mit dem oberen Bereich des füllens.
    Wenn Du mit ToString arbeitest solltest Du bedenken, dass Colors 2 mögliche Darstellungsvarianten haben:

    VB.NET-Quellcode

    1. '1.
    2. col = Color.Red
    3. '2.
    4. col = Color.FromArgb(&hFF0000)
    Das sollte dann beides funktionieren.
    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!
    das ist denke ich vernachlässigbar... Da ja in Customcolors nur Integer geschrieben werden dürfen.(was ja mein problem bei der verknüpfung mit dieser doofen stringcollection is) Und diese Integer werden ja nirgendwo vom nutzer geschrieben sondern ausschließlich immer vom system selbst. Also siehe Code. Ausgesucht werden die farben ja immer nur im Colordialog über Farbe definieren.
    Aber du hast schon recht... das war der eigentliche grund weshalb ich auf der suche war nach etwas anderem als dem was man unter my.settings zur verfügung gestellt bekommt.
    Und wenn Du von My.Settings zu einer MyDataTable wechselst?
    Da kannst Du Dir Color-Spalten machen, so viel wie Du willst und hast die xml-Datei neben Deiner exe liegen.
    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!
    genrell bin ich mit der funktionalität so ja zufrieden. Mehr wie 16 eigene Farben gibt der Dialog ja nicht her und werde ich auch nicht brauchen für mein vorhaben.
    Das einzige was mir halt nicht gefällt ist die arbeit über eine Hilfslist(of integer) die ich erst mit for each füllen muss. Gibts da keine möglichkeit das direkt und eleganter zu lösen.
    Hab schon versucht das in Linq auszudrücken... aber leider ist ein Element in stringcollection kein string sondern ein Object un damit leider nich zu nem int zu parsen :D