[VB]Checkbox form

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • fopspeen
  • Registratie: Februari 2008
  • Laatst online: 10-08-2023
Beste tweakers,

Ik ben bezig met een VB beoordelings form.
Hier kunnen een aantal keuzes worden ingevuld naar mate iets klopt bij een persoon.
Hier heb ik checkboxen voor gebruikt (zie plaatje)
Wat er nu moet gebeuren is, zodra er iets gekozen word dat dit automatisch verrekend word naar een totaal. de score word in een label weggeschreven.

Als ik bijvoorbeeld de 0 kies, moeten alle andere vinkjes uitgevinkt worden en bij het totaal 0 worden gezet. Dat is me al gelukt.
Maar als ik bijvoorbeeld daarna de 1 kies moet de 0 weer uitgevinkt worden, en moet er bij totaal een 1 komen te staan, en dat is me nog niet gelukt. Ook is het zo dat er 2 vakjes mogen worden aangevinkt, op uitzondering van de 0. Er mag bijvoorbeeld een 1 + 2 worden aangevinkt, Die 2 tel je op, en deel je door 2 dus word het 1,5 of 2,5 enz.
En dit is mij nog niet gelukt.

In vba is mij dit wel gelukt, maar daar is dit allemaal ook veel makkelijker. Met VB ben ik nog een groentje, heb alleen nog code aangepast, nog nooit zelf geschreven. Maar hier is de code die i kbij de 1e checkbox heb, de 0 dus.

Visual Basic:
1
2
3
4
5
6
7
8
        If CheckBox1.CheckState = 1 Then CheckBox2.CheckState = 0
        If CheckBox1.CheckState = 1 Then CheckBox3.CheckState = 0
        If CheckBox1.CheckState = 1 Then CheckBox4.CheckState = 0
        If CheckBox1.CheckState = 1 Then CheckBox5.CheckState = 0
        If CheckBox1.CheckState = 1 Then CheckBox6.CheckState = 0

        If CheckBox1.CheckState = 1 Then Label30.Text = "0"
        If CheckBox1.CheckState = 0 Then Label30.Text = ""


Afbeeldingslocatie: http://img207.imageshack.us/img207/4689/formesc.jpg

Acties:
  • 0 Henk 'm!

  • BlackHawkDesign
  • Registratie: Maart 2005
  • Laatst online: 20-09 15:40
Ik ben eerlijk gezegd niet zo bekend met VB, vroegah op 15 jarige leeftijd ooit mee begonnen, nooit meer naar om gekeken.

Misschien wat algemene tips: Als je zeg if(piet=0).. hoort dit niet te zijn: if(piet==0)
Aangezien je dan echt vergelijkt en niet een waarde toewijst. Ik weet niet of de syntaxt in VB hier anders in is.

Is dit VB script, dus in ASP of gewoon het echte VB?

Acties:
  • 0 Henk 'm!

  • Tim_bots
  • Registratie: April 2004
  • Laatst online: 20-08 08:10
Ik weet niet meer hoe het precies moet maar in VB5 en 6 kun je elementen is een array stoppen. Dit is weliswaar geen volledige oplossing maar het zal je wel helpen om lange lijsten code te voorkomen.

Om een array te maken pas het index element aan of kopieer en plak een checkbox en VB zou moeten vragen of je een array wilt maken.

Alvast hartelijk bedankt voor al jullie hulp en reacties, Tim Bots


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 22-09 14:14

Matis

Rubber Rocket

Is het gebruik van RadioButtons niet veeeeeel makkelijker?

Daarnaast kun je je textvalue omzetten naar een int en die in verrekenen!

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • qanar
  • Registratie: Februari 2008
  • Laatst online: 21-05-2019
ipv checkboxen radio buttons gebruiken?

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Wat is nu precies je vraag. Aan "Het lukt niet" hebben we hier niet zo veel. We gaan namenlijk geen kant en klaar antwoord voor je geven.

In welke VB programmeer je overigens? VB5/6 of VB.NET

Wat wil er niet lukken bij het vertalen van de VBA oplossing naar VB? De logica weet je blijkbaar al, aangezien je die al gemaakt hebt.

Ik zat zoals de posters hierboven idd ook meteen aan radiobuttons te denken, maar daarmee kan je natuurlijk niet 2 checkboxen tegelijk aanklikken zoals de TS wil.

[ Voor 19% gewijzigd door Woy op 25-03-2009 09:35 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 22-09 14:14

Matis

Rubber Rocket

qanar schreef op woensdag 25 maart 2009 @ 09:33:
ipv checkboxen radio buttons gebruiken?
Ja, het probleem is dat je de functionaliteit van radiobuttons wilt combineren met de mogelijkheden van checkboxes.

Het probleem daarbij is dat je eigenlijk maar een singlecheck wilt als het gaat over de 0 (de rest moet uit) en een multickeck als het gaat over de rest! Het probleem is ook dat we verder niet weten waar het fout gaat.

off-topic reactie weg gehaald

[ Voor 44% gewijzigd door Woy op 25-03-2009 09:43 ]

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • TheLunatic
  • Registratie: April 2001
  • Laatst online: 16-08 21:48

TheLunatic

Ouwe boxen.

Is toch gewoon een loopje wat CheckBox1 tot 5 cleart in de OnClick van CheckBox0? En een enkele regel die CheckBox0 cleart bij het klikken van CheckBox1 tot 5?

Ik heb nooit VB geprogrammeerd hoor, alleen wat Delphi, maar zo eenvoudig lijkt het me.

Mother, will they like this song?


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 22-09 14:14

Matis

Rubber Rocket

TheLunatic schreef op woensdag 25 maart 2009 @ 09:45:
Is toch gewoon een loopje wat CheckBox1 tot 5 cleart in de OnClick van CheckBox0? En een enkele regel die CheckBox0 cleart bij het klikken van CheckBox1 tot 5?

Ik heb nooit VB geprogrammeerd hoor, alleen wat Delphi, maar zo eenvoudig lijkt het me.
Klopt, zoals de TS aangeeft is hij nog nieuw met VB, maar dat is idd de makkelijkste oplossing. Het probleem voor de nummer 1-5 is dat je maar 2 opties mag checken. Daarmee zal je toch met een counter aan de gang moeten. Die checkt of er al twee opties gezet zijn. Indien dat is zal je geen 3e meer kunnen selecteren. Wanneer je een van de twee weer de-selecteerd kan je een andere selecteren. Dit zal je wel in een bericht moeten zetten bovenaan de pagina. Anders zal de gebruiker niet weten wat hij/zij moet doen.

Edit:

Ik wacht nu nog op reactie van de TS, immers is me nog niet helemaal duidelijk wat hij wil, of waar het spaak loopt.

[ Voor 6% gewijzigd door Matis op 25-03-2009 09:52 ]

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
We kunnen natuurlijk allemaal wat gaan speculeren, of we kunnen even op de TS wachten totdat die wat meer uitleg geeft.

De TS geeft aan dat hij in VBA al een oplossing gemaakt heeft, het lijkt me dus dat hij aan kan geven wat er precies niet wil lukken in VB.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Jewest
  • Registratie: Juni 2007
  • Laatst online: 22-09 16:22
Ik zou het volgende doen:

rename de eerste rij check boxen naar 1 naam, bijvoorbeeld chkEersteLijn
dubbel clicken op 1 van de check boxes
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub chkEersteLijn_Click(Index As Integer)
   dim lCounter as long

   if index = 0 then
      for lcounter = 1 to chkEersteLijn.ubound
          ' gebruik vbuncheck, je wil niet weten of dit nu 0 of 1 is.
          chkEersteLijn(lcounter).CheckState = vbunchecked
      next lcounter
   else

   end if

End Sub

Nieuw in vb programmeren: vergeet de option explicit niet. scheelt je een hoop debuggen. ;)

[ Voor 2% gewijzigd door Jewest op 25-03-2009 10:03 . Reden: opmaak + typo ]

Flickr
Canon 7D + Glas + Licht
Komt het rot over dan bedoel ik het anders en taalfouten zijn inbegrepen.


Acties:
  • 0 Henk 'm!

  • fopspeen
  • Registratie: Februari 2008
  • Laatst online: 10-08-2023
Nou ik heb aan radio buttons gedacht, maar daarme kun je er geen 2 aanvinken.
En zodra je bijvoorbeeld voor keuze 3 kiest, maar achteraf keuze 2 wilt gaat dit geloof ik ook niet.

Verder lukt het mij niet het vervolg te maken. De 0 lukt, ik heb ook nummer 1 t/m 5 gemaakt maar zodra ik dan mijn form probeer, krijg ik geen scores in het totaal terwijl de 0 wel lukt.
Ik heb mijn vb code zo simpel mogelijk gehouden (wel een hele code) maar dit lukte wel tenminste.

Hierbij de code van checkbox 2 + 3, dus score 1 + 2, en hier krijg ik geen scores van in de label.
Terwijl het eigenlijk toch hetzelfde is als score 0.

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    Private Sub CheckBox2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox2.CheckedChanged
        If CheckBox2.CheckState = 1 Then CheckBox1.CheckState = 0
        If CheckBox2.CheckState = 1 Then CheckBox4.CheckState = 0
        If CheckBox2.CheckState = 1 Then CheckBox5.CheckState = 0
        If CheckBox2.CheckState = 1 Then CheckBox6.CheckState = 0

        If CheckBox2.CheckState = 1 And CheckBox3.CheckState = 0 Then Label30.Text = "1"
        If CheckBox2.CheckState = 1 And CheckBox3.CheckState = 1 Then Label30.Text = "1.5"
        If CheckBox2.CheckState = 0 And CheckBox3.CheckState = 1 Then Label30.Text = "2"

    End Sub
    Private Sub CheckBox3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox3.CheckedChanged
        If CheckBox3.CheckState = 1 Then CheckBox1.CheckState = 0
        If CheckBox3.CheckState = 1 Then CheckBox5.CheckState = 0
        If CheckBox3.CheckState = 1 Then CheckBox6.CheckState = 0

        If CheckBox3.CheckState = 1 And CheckBox2.CheckState = 0 Then Label30.Text = "2"
        If CheckBox3.CheckState = 1 And CheckBox4.CheckState = 0 Then Label30.Text = "2"
        If CheckBox3.CheckState = 1 And CheckBox2.CheckState = 1 Then Label30.Text = "1.5"
        If CheckBox3.CheckState = 1 And CheckBox4.CheckState = 1 Then Label30.Text = "2.5"
        If CheckBox3.CheckState = 0 And CheckBox2.CheckState = 1 Then Label30.Text = "1"
        If CheckBox3.CheckState = 0 And CheckBox4.CheckState = 1 Then Label30.Text = "3"
    End Sub

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Heb je al proberen te debuggen? ( Debuggen: Hoe doe ik dat? )

Als je gewoon eens door je code loopt en kijkt wat er gebeurt, en waarom dat niet is wat je wilt, vind je waarschijnlijk de oplossing wel.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • fopspeen
  • Registratie: Februari 2008
  • Laatst online: 10-08-2023
Ja dat heb ik al geprobeerd, maar in de code is niets mis, dat is het rare juist.
Hij zou het gewoon moeten tonen in de label..
Maargoed in ieder geval al bedankt voor de hulp, ik heb al een paar handigere dingetjes gelezen die beter zijn dan de manier hoe ik het doe.

Acties:
  • 0 Henk 'm!

  • Vincenz0
  • Registratie: Augustus 2006
  • Laatst online: 12-09 09:48

Vincenz0

Coder

Gebruik je VB.Net? (visual studio 2005/2008)

als ik zo kijk is dit nogal een raare opzet,

Je zou eigenlijk alle checked changed functies moeten doorsturen naar 1 functie die alles afhandelt. zo iets:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Private Sub Handle_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
    dim lvSenderCheckbox, i, lvWaardeVoorText
    lvWaardeVoorText = 0
    lvSenderCheckbox = (sender as CheckBox)
    
    If lvSenderCheckbox.CheckState = 1 Then
        ' Uncheck alle andere checkboxes ik ga er even van uit dat je alle checkboxes in een array hebt, bijv:
        For i = 0 To CheckboxArray.Ubound
           ' Je zou hier nog meer kunnen checken bijv dat hij een combinatie wel of niet checked.
           If CheckboxArray(i) <> lvSenderCheckbox Then
              CheckboxArray(i).CheckState = 0 
           End If
        Next
    Else
        ' iets doen als de huidige selectie verijderd word.
    End If
    
    if Checkbox1.CheckState = 1 Then lvWaardeVoorText = lvWaardeVoorText + 0.5
    if Checkbox2.CheckState = 1 Then lvWaardeVoorText = lvWaardeVoorText + 1
    if Checkbox3.CheckState = 1 Then lvWaardeVoorText = lvWaardeVoorText + 1.5
    if Checkbox4.CheckState = 1 Then lvWaardeVoorText = lvWaardeVoorText + 2
    if Checkbox5.CheckState = 1 Then lvWaardeVoorText = lvWaardeVoorText + 2.5
    
    Label30.Text = CStr(lvWaardeVoorText)
    
End Sub 

' en in al je checkchanged event functies stuur je hem door naar de Handle procedure bijvoorbeeld:

Private Sub CheckBox3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox3.CheckedChanged 
    Handle_CheckedChanged(sender, e)
End Sub


heb het even uit mijn hoofd gedaan en niet gecompiled, maar is om je een idee te geven hoe je zo iets zou opzetten.

[ Voor 3% gewijzigd door Vincenz0 op 25-03-2009 11:46 ]

Coding 4 Fun!


Acties:
  • 0 Henk 'm!

  • Jewest
  • Registratie: Juni 2007
  • Laatst online: 22-09 16:22
ik zou het volgende doen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
private sub UpdateTxtBox()
   ' doe complete txt berekening hier
  dim dFinalValue as double

  if  CheckBox3.CheckState = 1 then
     if  CheckBox2.CheckState = 1 then
         dFinalValue = 2.5
     else
         dFinalValue  = 3
    end if
  elseif CheckBox2.CheckState = 1
      'etc
  end if
  Label30.Text = dFinalValue 
end sub

Private Sub CheckBox3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox3.CheckedChanged 
 If CheckBox3.CheckState = 1 Then 
    CheckBox1.CheckState = 0
    CheckBox5.CheckState = 0
    CheckBox6.CheckState = 0 
 end if
 'update the txt box
 UpdateTxtBox
end sub

Flickr
Canon 7D + Glas + Licht
Komt het rot over dan bedoel ik het anders en taalfouten zijn inbegrepen.


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
fopspeen schreef op woensdag 25 maart 2009 @ 11:12:
Ja dat heb ik al geprobeerd, maar in de code is niets mis, dat is het rare juist.
Dan is er toch geen probleem? Als er niks mis is met de code, zou hij moeten doen wat je wilt. Als de code niet goed is, dan kan je de regel code die niet doet wat je wil isoleren.

Ik vermoed trouwens dat je probleem zit in het feit dat je in je event-handler de checked state van je andere check-boxes aanpast, en daar word dan dus ook de CheckChanged van aangeroepen.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • fopspeen
  • Registratie: Februari 2008
  • Laatst online: 10-08-2023
Woy schreef op woensdag 25 maart 2009 @ 11:56:
[...]

Dan is er toch geen probleem?
Nee met de checkboxen niet meer, hij doet nu precies wat ik wil namelijk. :) Had alle labels verwijdert, en even opnieuw aangemaakt. Dus ik denk dat er ergens een instelling is geweest zoals invisible die per ongeluk aan stond :+ beetje heel erg dom dus!

Ik heb alleen nog 1 vraag.
Kun je een label, in een ander label uitlezen?

Ik heb bijvoorbeeld 5 labels onder elkaar van die checkboxen, en die moeten opgeteld worden, alsmede moet er een bepaalde som mee gedaan worden.
Of kan ik de uitkomsten misschien beter in een variabelen plakken?
Pagina: 1