ColorDialog

Status
Niet open voor verdere reacties.

Jan Groven

Gebruiker
Lid geworden
15 okt 2008
Berichten
21
Hoi allen,

Ik vraag een kleur op via de colordialogbox. Sla de verkregen kleur op in een textbox.

In een ander formulier (welk gekoppeld is aan een tabel -waarin ook de kleur is opgeslagen) moeten de knoppen dezelfde kleur hebben dan het veld in de textbox.

De code van het formulier waarin de kleur opgeslagen wordt vanuit een colordialog.

Code:
    Private Sub KleurTextBox_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles KleurTextBox.Click
        ColorDialogKleurKnopBepalen.ShowDialog()
        KleurTextBox.Text = ColorDialogKleurKnopBepalen.Color.ToString
    End Sub

De code van het formulier waarin een knop de kleur moet krijgen die gegeven werd aan die textbox:
Code:
                    Dim VBKleur As Color
Kleur = KleurTextBox.ToString
                    If Kleur = "" Then
                        VBKleur = Color.Gray
                    Else
                        VBKleur = Color.FromName(Kleur)
                    End If
                    .BackColor = VBKleur

Indien de textbox geen kleur heeft, wordt die inderdaad donkergrijs, indien de textbox wel een kleur heeft, krijgt de knop de gewone standaard-knopkleur.

Wat doe ik mis.

Ik heb ook volgende mogelijkheden gezien voor het opslaan van de kleur: KleurTextBox.Text = ColorDialogKleurKnopBepalen.Color.ToArgb en .ToKnownColor
en de volgende manier om de kleur op te roepen: VBKleur = Color.FromKnownColor(Kleur) en Color.FromArgb

Ik heb wel gemerkt dat wanneer de kleur geen standaard kleur is, de kleurcode voor Toknowncolor naar 0 wordt gezet. Dit is uiteraard niet wat ik wil.

Iemand die hier ervaring mee heeft,... Alvast bedankt!
 
Laatst bewerkt:
Is niet zo heel moeilijk.

Je kleur wordt gedefinieerd binnen je KleurTextBox_Click Sub. Daarbuiten verliest ie z'n waarde (Nothing). Dus als je daarna gaat vragen wat de kleur is zal ie altijd die grijze kleur pakken. (If Kleur = "" Then VBKleur = Color.Gray)

Je moet er sowieso een New Color van maken.
dus in je Class (buiten je Subs/Functions) declareer je je kleur

Code:
Dim Kleur as New Color

Kleur wordt heeft dan een Name & ARGB in alle Subs/Functions binnen de Class.

Voorbeeldje :
Code:
Public Class Form1

    Dim Kleur As New Color

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim ColorDialogKleurKnopBepalen As New ColorDialog

        ColorDialogKleurKnopBepalen.ShowDialog()
        Kleur = ColorDialogKleurKnopBepalen.Color
    End Sub


    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Button2.BackColor = Kleur
    End Sub

End Class

Hoop dat het nu duidelijk voor je is.
 
Laatst bewerkt:
Hey Pizara,

Dank je voor je reactie. Ik denk echter dat ik mijn vraag fout gesteld heb.

Het is de bedoeling dat in FORM1 (welk gekoppeld is aan een tabel in een db) het tekstvak 'kleur' een waarde krijgt door erop te klikken (via de colordialog)

De gegevens vanuit de colordialog worden dus opgeslagen in het de tabel onder 'ProductKleur'.

Vanuit een ander formulier, FORM2, dienen de knoppen de kleur te hebben van het item 'ProductKleur'. Dus telkens je van record wijzigd, dienen de knoppen een andere kleur te hebben.

Het probleem is dus dat je met 2 formulieren zit. Form1 om de tabel te wijzigen en van de juiste gegevens te voorzien (kleur,...) en in Form 2 moeten de knoppen de kleur krijgen dewelke in de tabel(form1) werden opgeslaan.

Stel volgende gegevens voor in Form1, gekoppeld aan de tabel producten:
ProductNr ProductKleur Product...
1 geel xyz
2 rood abc

Wanneer form 2 opgeroepen wordt, dient de kleur van de knoppen geel te zijn (actieve record is record 1). Als de gebruiker naar record 2 gaat in het form, is de actieve record record 2 en dienen de knoppen dus rood te worden.

Hetgeen je dus voorstelt werkt inderdaad indien je slechts 1 formulier gebruikt. Heb je misschien een idee hoe ik dus de kleur kan opslaan in 'ProductKleur'?
 
Goed , ik heb even geprobeerd om wat te testen.

Ik heb Form1 met 2 buttons , en Form2 met 1 button en 1 textbox.

form1.code

Code:
Public Class Form1

    Dim color As New Color

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Form2.Button1.BackColor = color.Yellow
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Form2.Button1.BackColor = color.Red
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Form2.Show()
    End Sub

End Class

form2.code

Code:
Public Class Form2

    Dim Color As New Color

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        TextBox1.Text = Button1.BackColor.Name
        Form1.BackColor = Drawing.Color.FromName(TextBox1.Text)
    End Sub
End Class

Als je deze situatie even maakt dan is dit is wat jij bedoelt (denk ik). Je klikt op een van de buttons op form1, die veranderd de achtergrondkleur van de button op form2. Als je dan op de button op form2 klikt, dan zet ie de naam van de kleur in de textbox en veranderd ie de achtergrondkleur van form1 op basis van die text in de textbox.

Mvg Pizara
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan