Toon posts:

[vb.net] Probleem met invoer data *

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heyz,

Ik zit met het volgende probleem :

Ik moet een oefening maken, maar als ik een while lus gebruik in combinatie met een keypress 13 ( enter) dan vraagt hij niet meer naar nieuwe variabelen, maar neemt hij dezelfde variabel die ik de eerste keer heb ingegeven tot de while conditie is vervuld :

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    Private Sub txtTemp_KeyPress(ByVal sender As Object, 
                    ByVal e As System.Windows.Forms.KeyPressEventArgs) 
                                        Handles txtTemp.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(13) Then
            
            While ingave < dagen
                temp = CInt(txtTemp.Text)
                txtTemp.Focus()
                lsbDagenTemp.Items.Add(temp)
                temptotaal = temptotaal + temp
                ingave += 1
                If temphoog < temp Then
                    temphoog = temp
                End If
                If templaag > temp Then
                    templaag = temp
                End If
            End While
 End Sub


hoe kan ik in de while zeggen dat hij moet wachten tot ik een nieuwe enter maak in m'n textbox zodat hij met de nieuwe variabele moet de while doen?

[ Voor 5% gewijzigd door curry684 op 29-09-2003 15:04 . Reden: mooi he, [code]-tags ]


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 01-10 16:56

gorgi_19

Kruimeltjes zijn weer op :9

Ingave weer op de initiele waarde van de tekstbox zetten, zodra op enter gedrukt wordt?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hoe bedoel je?

als ik ingave terug op 0 zet, dan zal de voorwaarde nooit voldaan worden.

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 01-10 16:56

gorgi_19

Kruimeltjes zijn weer op :9

niet in je while loop, maar er buiten.

en als je het loopje wil laten lopen totdat er op enter wordt gedrukt, moet je denk ik eens kijken naar multithreading. alleen of je daar zo vrolijk van wordt..

[ Voor 69% gewijzigd door gorgi_19 op 29-09-2003 15:08 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Waar initialiseer je ingave en dagen uberhaupt? :?

Professionele website nodig?


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hier staat de volledige code.

Thx 4 the help. Ik moet deze oefening tegen vanavond klaar hebben, maar ik heb al alles geprobeerd wat ik weet.

http://www.elkeenc.be/probleem.txt

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 01-10 16:56

gorgi_19

Kruimeltjes zijn weer op :9

Volgende vraag.. Wat moet de code uberhaupt doen?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
als ik hetvolgende gebruik voor de ingave van de temperatuur dan werkt het perfect:

temp = CInt(InputBox("geef temp van de dag in"))

maar het moet via een keypress 13 gebeuren...

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
eerst selecteer je een maand ( als je feb kiest, dan kijkt vraagt hij nog het jaar om te kijken of het een schrikkeljaar is)
dan moet je per dag de temperatuur ingeven die dan in de listbox komt,

als je de laatste dag hebt ingegeven, dan toont hij het temperatuurgemiddelde, hoogste temp en laagste temp.

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 01-10 16:56

gorgi_19

Kruimeltjes zijn weer op :9

Ik zou het helemaal niet met keypresses gaan doen. Als ik me goed herinner, heb je vast wel OnChange effecten. Waarom ga je daar niet mee stoeien?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
... opgave van leerkracht... die oefening kan ik perfect maken zonder die keypress, maar tja... hij wil ambetant doen waarschijnlijk...

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 01-10 16:56

gorgi_19

Kruimeltjes zijn weer op :9

Mogen er ook andere opmerkingen over je code gemaakt worden?

* gorgi_19 blijft het probleem namelijk nog steeds niet snappen...

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
:-)

ik ben nog maar 3 weken bezig met vb.net :-)

laat maar zitten, er zal niemand anders van de groep deze oplossing hebben.

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 01-10 16:56

gorgi_19

Kruimeltjes zijn weer op :9

Dat beschouw ik als een ja.. :P
Visual Basic .NET:
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
33
34
35
36
37
38
39
40
41
42
  Private Sub cmbMaand_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbMaand.SelectedIndexChanged
        Dim I As Integer
        Dim __sumOfTemperature As Double = 0
        Dim __highestTemperature As Double = -100
        Dim __lowestsTemperature As Double = 100
        Dim __currentMaand As Integer = CType(sender, System.Windows.Forms.ComboBox).SelectedIndex

        If __currentMaand = -1 Then Exit Sub

        Dim __numberOfDays As Integer = GetDaysInMonth(Int32.Parse(InputBox("jaartal")), __currentMaand)

        For I = 1 To __numberOfDays

            Dim __currentTemperature As Double = Convert.ToDouble(InputBox("geef temp van de dag in"))
            lsbDagenTemp.Items.Add(__currentTemperature)
            __sumOfTemperature += __currentTemperature

            __highestTemperature = Max(__currentTemperature, __highestTemperature)
            __lowestsTemperature = Min(__currentTemperature, __lowestsTemperature)

        Next

        lblGem.Text = __sumOfTemperature / __numberOfDays
        lblHoog.Text = __highestTemperature
        lblLaag.Text = __lowestsTemperature

    End Sub

    Private Function GetDaysInMonth(ByVal Year As Integer, ByVal Month As Integer) As Double

        Dim __date As DateTime = New DateTime(Year, Month, 28)
        Dim __startDay As Integer = 28

        While __date.AddDays(1).Day > 1

            __startDay += 1

        End While

        Return __startDay

    End Function

Om te beginnen: een temperatuur is een double, en geen integer.

Verder vond ik die if-statement niet zo netjes en heb die er uit gesloopt.
Ook bestaat de min / max functie; was ideaal in deze situatie.
En als laatste vond ik de case statement vrij ingewikkeld. Een aparte functie voor gemaakt (geen idee of deze werkt), maar geeft wel een idee; je verplaatst dan de problematiek in ieder geval naar VB.Net

Ook gebruik gemaakt van Convert Class. CInt, CDouble stammen nog uit de VB6 tijdperk.

Verder zullen er vast nog wel nettere oplossingen mogelijk zijn dan de inputbox (ik weet het wel zeker, namelijk een x-aantal textboxen). Indien alles correct is ingevuld, dan druk op je op een "bereken" knop en wordt de data berekend. Maar bij gebrek aan tijd nu even niet aan toe gekomen om te laten zien. :P

Deze optie is echter wel vrij makkelijk te implementeren.

Wat me als laatste opviel is dat je een lange method had.. Het wordt imho een stuk duidelijker als je alles onderverdeeld in kleinere methods.

[ Voor 33% gewijzigd door gorgi_19 op 29-09-2003 15:53 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
thx :-) heeft me massa's geholpen

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 01-10 16:56

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 29 September 2003 @ 15:48:
thx :-) heeft me massa's geholpen
Net nog een kleine wijziging aangebracht; die while loop is helemaal niet noodzakelijk. Een For-loopje is hier imho veel beter. Zo heb je ook niet het probleem dat je de teller (in dit geval I) steeds eentje moet ophogen.

Digitaal onderwijsmateriaal, leermateriaal voor hbo

Pagina: 1