Backcolor opslaan in XML of ini

Status
Niet open voor verdere reacties.

old Hippy

Gebruiker
Lid geworden
24 mei 2008
Berichten
911
Hallo Allemaal

Ik Wil graag de backcolor van een element opslaan.

In een setting gaat dit wel.
Maar gezien het grote aantal is dit niet zo wenselijk.
Is dit in een XML of INI te doen.

Groet Old Hippy
 
Absoluut.

Je kunt in settings echter ook een "stringcollection" opslaan. In een enkele stringcollection kun je weer een tiental kleuren opslaan. Je kunt dus ook wat meer flexibiliteit in je settings gebruiken
 
wampier dank voor de reactie.

Toch vind ik een setting niet zo geschikt.
het gaat om 72 checkboxen die drie kleuren kan krijgen ,respectievelijk, nog te spelen, aan het spelen, gespeeld.
Lijkt mij netter om dit in een ini of liever een xml te doen.

Old Hippy
 
Het kan natuurlijk, maar een stringcollection wordt in je settings ook als XML opgeslagen. bijvoorbeeld:

[xml]
<?xml version="1.0" encoding="utf-16"?>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<string>ffffff</string>
<string>ffaabb</string>
<string>eeccdd</string>
</ArrayOfString>
[/xml]

Uiteindelijk moet je toch een stringcollectie manipuleren. Ik wil je er overigens niet vanaf praten, maar aangeven dat het onder water nagenoeg hetzelfde is.

Aan de andere kant is een eigen xml parser schrijven wel leerzaam.
 
Je hebt gelijk wampier.

Ik kies toch om wat nieuws voor mij om te leren

ik zie wel voordelen in xml.
het opgeslagen doc kan allerlij dingen bevatten.
Bij het verwijderen of opniew ergens anders instaleren ben je de settings kwijt.
 
Linq kan XML een stuk makkelijker maken. oudere methodes worden echter ook nog ondersteund, mocht je niet afhankelijk willen zijn van .NET
 
Hi Wat is Linq

hoe zie de code voor kleur er uit
hat al iets geprobeerd maar gaat niet goed.

Code:
Dim schrijver As New XmlTextWriter("C:\Test.xml", Encoding.UTF8)
        schrijver.Formatting = Formatting.Indented
        schrijver.WriteStartDocument()

        schrijver.WriteStartElement("Kleur")


        schrijver.WriteStartElement("CB_N01_P1")
        schrijver.WriteAttributeString("Kleur", CType(CB_N01_P1.BackColor, SystemColors())
        schrijver.WriteEndElement()
 
Hi Wampier

Het schrijven gaat maar wat te doen bij het lezen???

Weg geschreven
Code:
<?xml version="1.0" encoding="utf-8"?>
<Kleur>
  <CB_N01_P1 Kleur="FF7CFC00" />
  <CB_N02 Checked="0" />
  <CB_N03 Checked="0" />
</Kleur>

Code voor schrijven
Code:
 Dim schrijver As New XmlTextWriter("C:\Test.xml", Encoding.UTF8)
        schrijver.Formatting = Formatting.Indented
        schrijver.WriteStartDocument()

        schrijver.WriteStartElement("Kleur")


        schrijver.WriteStartElement("CB_N01_P1")
        schrijver.WriteAttributeString("Kleur", Hex(CB_N01_P1.BackColor.ToArgb))
        schrijver.WriteEndElement()

Code voor lezen ???


Code:
 Dim lezer As New XmlTextReader("C:\Test.xml")

        While (lezer.Read)
            If (lezer.NodeType = XmlNodeType.Element) Then

                If (lezer.Name = "CB_N01_P1") Then
                    CB_N01_P1.BackColor = (CB_N01_P1.BackColor)
                End If
 
Laatst bewerkt:
Ik denk dat je dit bedoelt:

CB_N01_P1.BackColor = Val("&H" & lezer.Value & "&")


*edit*

uhm:

Code:
CB_N01_P1.BackColor =  Color.FromArgb(Val("&H" & lezer.Value & "&"))

*edit 2*

Ik zie niet of je readattribute gebruikt, maar anders moet je mogelijk de attribute nog uitlezen. Ik prefereer echter zelf subnodes
 
Laatst bewerkt:
Oeps dit dit geeft geen fout maar Het element neemt de kleur aan van een ander element als ik met de muis er over ga.

hoop dat je dit snapt
 
Mogelijk kun je even met een msgbox uitsluiten dat je de juiste waarde probeert terug te plaatsen?

Indien de waarde juist gezet wordt, moet je mogelijk eerst even een refresh van het scherm afdwingen. Anders kan ik de kleurverandering ook niet verklaren. Tenminste niet binnen het XML gebeuren.
 
Ok even de huidigge codes

Schrijven

Code:
Private Sub ButtonItem49_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonItem49.Click
        Dim schrijver As New XmlTextWriter("C:\Test.xml", Encoding.UTF8)
        schrijver.Formatting = Formatting.Indented
        schrijver.WriteStartDocument()

        schrijver.WriteStartElement("Kleur")
        schrijver.WriteStartElement("CB_N01_P1")
        schrijver.WriteAttributeString("BackColor", Hex(CB_N01_P1.BackColor.ToArgb))


        schrijver.WriteEndElement()
        schrijver.Flush()
        schrijver.Close()


Opgeslagen kleur

<?xml version="1.0" encoding="utf-8"?>
<Kleur>
  <CB_N01_P1 BackColor="FF7CFC00" />
</Kleur>
    End Sub


Ophalen

Code:
Private Sub ButtonItem50_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonItem50.Click
        Dim lezer As New XmlTextReader("C:\Test.xml")

        While (lezer.Read)


            If (lezer.Name = "CB_N01_P1") Then
                ' CB_N01_P1.BackColor = Color.FromArgb(Val("&H" & lezer.Value & "&"))
                MsgBox(CB_N01_P1.BackColor = Color.FromArgb(Val("&H" & lezer.Value & "&")))

            End If

        End While
        lezer.Close()
    End Sub


Msg False
 
probeer eens

Code:
msgbox(HEX(Val("&H" & lezer.Value & "&")))

Dat zou FF7CFC00 op moeten leveren.
 
Ok Wampier dank voor je geduld.

de uitkomst van de msgbox nu is 0

Old hippy
 
Laatst bewerkt:
misschien dan eens:

msgbox(lezer.value)

waarschijnlijk krijg je dan: kleur=.... Zie ook mijn tweede edit van mijn voor-vorige post. Je slaat op met writeattribute maar je leest niet met read attribute.

Ik zelf prefereer zo'n schema:
Code:
[items]
    [checkbox 1]
         [kleur]
              <ff00c010>
         [checked]
              <true>
         ...
    [checkbox 2]
         [...]
[/items]
Overigens kun je gewoon ook met een split commando op de "=" splitsen om de kleurcode te krijgen.
 
Bij msgbox(lezer.value) blijft de msgbox leeg

Code:
Private Sub ButtonItem50_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonItem50.Click
        Dim lezer As New XmlTextReader("C:\Test.xml")

        While (lezer.Read)
            If (lezer.NodeType = XmlNodeType.Element) Then

                If (lezer.Name = "CB_N01_P1") Then
                    MsgBox(lezer.Value)

                End If

            End If

        End While
        lezer.Close()
    End Sub
 
Laatst bewerkt:
Even zelf weer moeten lezen.

probeer eens:
MsgBox(lezen.GetAttribute(0))
 
OK Nu krijg ik FF7CFC00

Maar nu het element de kleur nog geven.
CB_N01_P1.BackColor = lezer.GetAttribute(0) Werkt niet
maar dit wel
CB_N01_P1.BackColor = Color.FromArgb(Val("&H" & lezer.GetAttribute(0) & "&"))

maar als ik het heb geladen kan ik de kleur nietmeer veranderen
 
Laatst bewerkt:
Hoe bedoel je, "kan de kleur niet meer veranderen" ? In principe zou dit geen invloed moeten hebben op de rest van je programma.

Na een verandering moet je mogelijk wel een refresh afdwingen om de nieuwe kleur te zien, maar het gebruik van XML zou niet de rest van je programma moeten beïnvloeden.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan