Avatar billede blumsted Nybegynder
06. november 2009 - 10:53 Der er 5 kommentarer og
1 løsning

Begynder hjælp

Hej

Sidder og er ved at prøve og lave lille et program i VB 2008 express ,jeg er ret ny i det her så jeg håber mit spørgsmål er til at forstå… Jeg har 12 checkboxe som hver reppesentere værdierne 1 - 12,  jeg har så 4 textboxe hvor værdierne skal over i når jeg klikker på en Command button.. Det jeg så godt kunne bruge hjælp til er en simpel kode, der popper op med en messagebox hvis der ikke er makeret 4 chekboxe, og så overfører de 4 værdier til Textboxene 1 -4…
Avatar billede tjacob Juniormester
08. november 2009 - 12:51 #1
1) Du er i den forkerte kategori. Dette er den "gamle" VB kategori. Du kører VB.NET og skal herover: http://www.eksperten.dk/spm/Programmering/Visual-Basic-NET/

2) Denne kode kan hjælpe dig på vej:
Den antager at du kun har de 12 checkboxe i formen, og at de hedder CheckBox1 til -12:


        Dim i As Long, lCount As Integer, lVal(4) As Long, Ctrl As Control
        For Each Ctrl In Me.Controls
            If TypeOf Ctrl Is CheckBox Then
                Dim Cbox As CheckBox = DirectCast(Ctrl, CheckBox)
                If Cbox.Checked = True Then
                    lCount += 1
                    If lCount > 4 Then Exit For
                    lVal(lCount) = CLng(Cbox.Name.Substring(9))
                End If
            End If
        Next Ctrl
        If lCount = 4 Then
            TextBox1.Text = CStr(lVal(1))
            TextBox2.Text = CStr(lVal(2))
            TextBox3.Text = CStr(lVal(3))
            TextBox4.Text = CStr(lVal(4))
        Else
            MsgBox("Der er ikke krydset korrekt antal checkboxe af")
        End If
Avatar billede blumsted Nybegynder
09. november 2009 - 16:44 #2
Hej Tjacob

Tak for hjælpen, det kræver jo lidt viden om hvad man skal slå op under for at kunne klare sig med bøger alene, men jeg kan se at du er selvlært så der´er måske håb forude. Hvis du har mod på det vil jeg gerne give dig 100 point mere for hvis du gider at uddybe koden lidt for mig, så jeg måske også selv fatter lidt af hvad der sker... Men ellers så får du bare de 30 hvis du ligger et indlæg ind som svar....
Avatar billede tjacob Juniormester
09. november 2009 - 17:17 #3
Der er ingen grund til at sætte points op. Jeg skal prøve at forklare koden:

1) For Each Ctrl In Me.Controls ......Next Ctrl
-Løber igennem alle kontroller i formen.

2) If TypeOf Ctrl Is CheckBox Then......End If
-Hvis kontrollen er en CheckBox, så...

3) Dim Cbox As CheckBox = DirectCast(Ctrl, CheckBox)
-Opret en instans af en CheckBox, og sæt den lig den aktuelle kontrol

4) If Cbox.Checked = True Then.......End If
-Hvis den er Checked, så...

5a) lCount += 1
-Forøg tælleren med 1

5b) If lCount > 4 Then Exit For
-Hvis der er flere end 4 CheckBoxe der er Checked behøver vi ikke tælle mere, og går ud af loopet.

5c) lVal(lCount) = CLng(Cbox.Name.Substring(9))
-Hvis der ikke er talt 4 endnu, skal CheckBoxens "Værdi" gemmes i lVal-arrayet. CheckBoxens "Værdi" er i dette tilfælde det tal der indgår i navnet. Cbox.Name.Substring(9) er alle karakterer i CheckBoxens navn fra karakter 9 og frem. Det er en string der konverteres til et tal med CLng().
-Dette er for i øvrigt en fejl fra min side. Der er ingen grund til at konvertere. Jeg lægger en ny version af koden nederst.

6) Nu er Loopet kørt, og vi har talt hvor mange CheckBoxe der er Checket. Vi har desuden gemt tallene fra disse CheckBoxe i Arrayet lVal.

7) If lCount = 4 Then....Else.....End If
-Hvis der er præcis 4 CheckBoxe der er Checket, så...

8) TextBox1.Text = CStr(lVal(1)) osv.
-Skriv værdierne fra lVal-arrayet til de 4 TextBoxe.

9) Under Else
-Hvis der er flere eller færre end 4 CheckBoxe der er Checket, så...

10) MsgBox("Der er ikke krydset korrekt antal checkboxe af")
-Giv bruger besked med en message box.


Dim i As Long, lCount As Integer, lVal(4) As String, Ctrl As Control
        For Each Ctrl In Me.Controls
            If TypeOf Ctrl Is CheckBox Then
                Dim Cbox As CheckBox = DirectCast(Ctrl, CheckBox)
                If Cbox.Checked = True Then
                    lCount += 1
                    If lCount > 4 Then Exit For
                    lVal(lCount) = Cbox.Name.Substring(9)
                End If
            End If
        Next Ctrl
        If lCount = 4 Then
            TextBox1.Text = lVal(1)
            TextBox2.Text = lVal(2)
            TextBox3.Text = lVal(3)
            TextBox4.Text = lVal(4)
        Else
            MsgBox("Der er ikke krydset korrekt antal checkboxe af")
        End If
Avatar billede blumsted Nybegynder
10. november 2009 - 20:14 #4
Tak for hjælpen...
Avatar billede tjacob Juniormester
15. november 2009 - 15:19 #5
Okay, koden skal bare modificeres lidt:

Koden lægges i knappen, og ændres til:

lVal(lCount) = Cbox.Name.Substring(9)

ændres til:

lVal(lCount) = Cbox.Tag
Avatar billede blumsted Nybegynder
15. november 2009 - 15:36 #6
Nu kører det bare....
Tusind tak endnu en gang...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester