Du bist nicht angemeldet.

[VB 2008] Integer Fehler

stiffler2612

Registrierter Benutzer

  • »stiffler2612« ist der Autor dieses Themas

Beiträge: 15

Dabei seit: 25. November 2009

  • Private Nachricht senden

1

Freitag, 22. Januar 2010, 15:01

Integer Fehler

Hi zusammen,

komm mir mit der folgenden frage jetzt zwar was dumm vor aber ich finde die lösung einfach net ^^

ich habe mir nen kleinen shutdown manager programmiert der seine aufgabe auch erfüllt.
auch kann ich in den feldern stunden und minuten falscheingaben wie text über die exception abfangen, allerdings:

gebe ich in einem der felder eine kommazahl ein erhalte ich keine fehlermeldung, welche ja eigentlich kommen müsste (im compiler) da ich die variable als integer deklariert habe. wenn ich sowas in pascal mache sagt er mir gleich "geht net weil kein integer" aber in vb2008 scheint der das irgendwie dennoch anzunehmen und umzuwandeln.

folgender effekt bei folgenden eingaben in der textbox auf der form:

minuten = 1.5
der countdown zählt 15 minuten ab also übersieht quasi das komma

stunden = 1.5
der countdown zählt 2 stunden ab ^^

das verstehe ich nicht eigentlich müsste das programm doch abstürzen da es eine kommazahl ist.
wie kann ich jetzt also einen msgbox mit FEHLER ausgeben bei eingabe einer kommazahl?und warum akzeptiert vb die eingabe obwohl die variablen als integer deklariert sind?

da ich mit vb erst angefangen habe bitte ich um die einfachste lösung^^
wenn ihr es braucht poste ich auch den entsprechenden teil im quellcode

ich raff einfach net wie die integer variable nen kommawert annehmen kann

thx 4 help

Dodo

Super Moderator

Beiträge: 4 955

Dabei seit: 5. Oktober 2008

Wohnort: Berlin

Hilfreich-Bewertungen: 583

  • Private Nachricht senden

2

Freitag, 22. Januar 2010, 15:09

Wenn ein Doublewert zum Integer umgewandelt wird, dann wird er abgerundet oder aufgerundet. Wieso er bei den Minuten das Komma wegnimmt ist unlogisch aber bei 1.5 auf 2 ist im grunde richtig. Zeig mal dein Code wie die Texteingaben dem Shutdown Parametern hinzufügst.

Ansonsten kann der Shutdown überhaupt Kommawerte verarbeiten als Zeit?
KEINE VB-FRAGEN ÜBER PN STELLEN!

Wenn du einem Hungernden einen Fisch schenkst, wird er morgen wieder hungrig sein, bringst du ihm das Fischen bei, wird er nie wieder hungrig sein.

Alle Copy & Paste Geber und Forderer, nehmt euch dies zu Herzen!

stiffler2612

Registrierter Benutzer

  • »stiffler2612« ist der Autor dieses Themas

Beiträge: 15

Dabei seit: 25. November 2009

  • Private Nachricht senden

3

Freitag, 22. Januar 2010, 15:12

Der Komplette Code, noch nicht optimiert ^^ wie z.b elseif oder ein case statt if ^^ thx for help


--------------------------------------
Public Class frmMain
Dim verbleibendezeit As Integer
Dim stunden As Integer
Dim minuten As Integer
Dim sekunden As Integer

Private Sub cmdBeenden_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdBeenden.Click
End
End Sub

Private Sub cmdOk_Click() Handles cmdOk.Click
Try
stunden = txtHours.Text
minuten = txtMinutes.Text
If minuten > 60 Then
MsgBox("Fehler!Minuten können maximal 60 sein!")
Exit Sub
End If
sekunden = -1
Catch ex As Exception
MsgBox("Fehler!Sie müssen eine Ganzzahl eingeben!")
Exit Sub
End Try
verbleibendezeit = txtHours.Text * 60 * 60 + txtMinutes.Text * 60
Timer1.Start()
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Do Until verbleibendezeit = 0
If sekunden < 0 Then
minuten = minuten - 1
sekunden = 59
End If
If minuten < 0 And stunden <> 0 Then
stunden = stunden - 1
minuten = 59
End If
If stunden < 0 Then
stunden = 0
End If
If stunden < 10 Then
lblCountdownAnzeige.Text = "0" & stunden
Else
lblCountdownAnzeige.Text = stunden
End If
If minuten < 10 Then
lblCountdownAnzeige.Text &= ":0" & minuten
Else
lblCountdownAnzeige.Text &= ":" & minuten
End If
If sekunden < 10 Then
lblCountdownAnzeige.Text &= ":0" & sekunden
Else
lblCountdownAnzeige.Text &= ":" & sekunden
End If
'lblCountdownAnzeige.Text &= stunden & ":" & minuten & ":00"
'verbleibendezeit = verbleibendezeit - 1
sekunden = sekunden - 1
verbleibendezeit = verbleibendezeit - 1
Exit Sub
Loop
Timer1.Stop()
Shell("shutdown -t 00 -f -s")
'MsgBox("Jetzt würde ein Shutdown erfolgen")
End Sub

Private Sub cmdCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCancel.Click
Timer1.Stop()
lblCountdownAnzeige.Text = "Abgebrochen"
End Sub
End Class


die stunden abfrage <0 ist überflüssig ist mir klar habs noch net verbessert^^

Dodo

Super Moderator

Beiträge: 4 955

Dabei seit: 5. Oktober 2008

Wohnort: Berlin

Hilfreich-Bewertungen: 583

  • Private Nachricht senden

4

Freitag, 22. Januar 2010, 15:21

Bei der Zuweisung der Textboxeingabe zu der Integervariable mach mach

Visual Basic Quellcode

1
stunden = CInt(txtHours.Text)


Da werden Komma zu ganzwerten umgewandelt.
KEINE VB-FRAGEN ÜBER PN STELLEN!

Wenn du einem Hungernden einen Fisch schenkst, wird er morgen wieder hungrig sein, bringst du ihm das Fischen bei, wird er nie wieder hungrig sein.

Alle Copy & Paste Geber und Forderer, nehmt euch dies zu Herzen!

stiffler2612

Registrierter Benutzer

  • »stiffler2612« ist der Autor dieses Themas

Beiträge: 15

Dabei seit: 25. November 2009

  • Private Nachricht senden

5

Freitag, 22. Januar 2010, 15:22

werds gleich mal versuchen sekunde ;) und danke für die schnellen antworten ;) kleines programm große probleme ;)

falscheingaben sollen ja unterbunden werden ;)

Dodo

Super Moderator

Beiträge: 4 955

Dabei seit: 5. Oktober 2008

Wohnort: Berlin

Hilfreich-Bewertungen: 583

  • Private Nachricht senden

6

Freitag, 22. Januar 2010, 15:24

Also ich würde dir zu NumericUpDown Control empfehlen, das nutze ich immer, spart man sich jede menge Code ärger. Da man in den Control eh NUR Zahlen eingeben darf und man durch die Maximal Eigenschaft auch bestimmen kann wie hoch die eingegebene Zahl maximal sein darf.
KEINE VB-FRAGEN ÜBER PN STELLEN!

Wenn du einem Hungernden einen Fisch schenkst, wird er morgen wieder hungrig sein, bringst du ihm das Fischen bei, wird er nie wieder hungrig sein.

Alle Copy & Paste Geber und Forderer, nehmt euch dies zu Herzen!

stiffler2612

Registrierter Benutzer

  • »stiffler2612« ist der Autor dieses Themas

Beiträge: 15

Dabei seit: 25. November 2009

  • Private Nachricht senden

7

Freitag, 22. Januar 2010, 15:24

keine veränderung 1,5 bewirkt 2 stunden countdown 1.5 bewirkt 15 stunden countdown

wohlgemekert: bei richtigen eingaben funktioniert alles fehlerfrei ;) weng das geht

mit dem numeric darüber habsch schon gelesen aber eigentlich will ich die zahlen manuell eingeben und nicht hoch un runter klicken ;)

muss doch gehen das der integer auch nur das was man darunter eigentlich versteht animmt ;)

das problem hatte ich echt noch in keiner anderen sprache *sprachlos*

nochma edit: sehe grade da kann ich ja dann auch manuell eingeben sry, gibt es dann aber die möglichkeit die pfeile für "hoch und runter" in der box auszublenden?das sieht was unschön aus

wie immer thx 4 help

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »stiffler2612« (22. Januar 2010, 15:31)


Mono

Registrierter Benutzer

  • »Mono« ist männlich

Beiträge: 1 386

Dabei seit: 20. April 2009

Wohnort: Dresden

Hilfreich-Bewertungen: 60

  • Private Nachricht senden

8

Freitag, 22. Januar 2010, 15:30

Visual Basic Quellcode

1
2
3
4
5
6
7
8
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
        Dim inti As Integer
        If Not Integer.TryParse(sender.text, inti) Then
            Debug.Print(sender.text)
         else
               'tu was mit inti (da ist die integer var drin)
        End If
    End Sub


damit kannst es prüfen

gruss mono


Das ist meine Signatur und sie wird wunderbar sein!

stiffler2612

Registrierter Benutzer

  • »stiffler2612« ist der Autor dieses Themas

Beiträge: 15

Dabei seit: 25. November 2009

  • Private Nachricht senden

9

Freitag, 22. Januar 2010, 15:33

Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
Dim inti As Integer
If Not Integer.TryParse(sender.text, inti) Then
Debug.Print(sender.text)
else
'tu was mit inti (da ist die integer var drin)
End If
End Sub

danke jedoch hab ich hierbei dann das problem das ich net weis was tryparse ist , sender.text etc also was wo wie genau was macht ^^ sry sag ja vb is für mich neu ;)

ich google das derweil mal vlt werd ich dann auch schauler aus diesem code


edit: also ich hab jetzt gegooglet und das mit dem tryparse raff ich net so ganz eine "erklärung die en anfänger rafft wäre da nett oder eine option wie man die updownalgin im numericdropdown abschalten kann wenn das geht^^
oder gibts noch ne einfachere möglichkeit als tryparse bei verwendung einer textbox?

und danke für die bisherige hilfe^^

"manchmal wir ein fluss zum meer"

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »stiffler2612« (22. Januar 2010, 16:01)


stiffler2612

Registrierter Benutzer

  • »stiffler2612« ist der Autor dieses Themas

Beiträge: 15

Dabei seit: 25. November 2009

  • Private Nachricht senden

10

Freitag, 22. Januar 2010, 16:14

also hab noch weiter mit dem tryparse rumgespielt und siehe da es geht THX allerdings raff ich folgendes net

If Not Integer.TryParse(txtHours.Text, stunden) Then
'Debug.Print(txtHours.Text)
MsgBox("geht")
usw.......

was passiert jetzt genau mit dem kram in der klammer?denn wenn ich beim minuten feld ne komma zahl mache bekomme ich auch die msgbox obwohl ich das txt.minutes hier ja garnicht drin habe. zwar will ich das auch aber ich raff den syntax nit...... und denn will ich raffen egal obs jetzt so geht ;)

Mono

Registrierter Benutzer

  • »Mono« ist männlich

Beiträge: 1 386

Dabei seit: 20. April 2009

Wohnort: Dresden

Hilfreich-Bewertungen: 60

  • Private Nachricht senden

11

Freitag, 22. Januar 2010, 16:20

Integer.Tryparse(OBJEKT,AUSGABEINTEGER) as Boolean

Diese Funktion versucht eine objekt (OBJEKT) in einen Integer zu konvertieren, und schreibt, wenn es "geht" diesen in AUSGABEINTEGER.
Die Rückgabe ist True oder False. True, wenn es geht, false wenn nicht.

Beispiel:

Visual Basic Quellcode

1
2
3
4
5
6
dim MyString = Textbox1.text
dim MyEventuellerIntWert

IF Integer.TryParse(MyString, MyEventuellerIntWert) = True Then ' das = True kann man getrost weglassen, denn If prüft immer ob = true
Msgbox("Das ist tatsächlich ein Integer " & MyEventuellerIntWert.tostring
end if


Das ist meine Signatur und sie wird wunderbar sein!

stiffler2612

Registrierter Benutzer

  • »stiffler2612« ist der Autor dieses Themas

Beiträge: 15

Dabei seit: 25. November 2009

  • Private Nachricht senden

12

Freitag, 22. Januar 2010, 16:25

ah ok jetzt wird mir einiges mehr klar.

nur warum geht das auch mit txtminutes wenn es garnicht als objekt eingetragen ist?

soweit ich deine erklärung verstehe wäre das in meinem fall wie folgt...

If Not Integer.TryParse(txtHours.Text, stunden) Then .....
versucht er ob er txthours in ein integer wandeln und falls ja wird der wert von txthours in stunden geschrieben ^^

aber woher weiß er das jetzt auch von den minuten ?

sry wenn ich mich was dusselig anstelle ... wurd aber auch leider aus dem mdsn net schlauer

ansonsten habe ich deine super erklärung aber jetzt gerafft

THX das hat mir den tag gerettet wäre super lieb wenn mir das mit dem txtminutes noch erklären könntest

edit: sry ^^ wenn txthours.text kein integer is schreibt er ihn in stunden wegen dem not?fällt mir grad erst auf

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »stiffler2612« (22. Januar 2010, 16:33)


Mono

Registrierter Benutzer

  • »Mono« ist männlich

Beiträge: 1 386

Dabei seit: 20. April 2009

Wohnort: Dresden

Hilfreich-Bewertungen: 60

  • Private Nachricht senden

13

Freitag, 22. Januar 2010, 16:35

Also "ER" weiss nix von den Minuten,
es sei denn, du fragst die 2. Textbox auch ab..


Bei deinem Beispiel mit txtHours.text, stunden fragt er genau den String in der txtHours textbox ab, für die andere müsstest du das extra prüfen.
Man könnte das zusammenfassen durch:

Visual Basic Quellcode

1
2
3
4
5
6
7
8
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TxtHours.TextChanged, Handles TxtMinutes.TextChanged
Dim inti As Integer
        If Not Integer.TryParse(sender.text, inti) Then
            Debug.Print(sender.text)
         else
               'tu was mit inti (da ist die integer var drin)
        End If
    End Sub


sender ist dann die jeweilige txtbox als "sender" des events mit den eventargumenten e.

*edit*

Falls die Funktion FALSE zurückliefert (also das konvertieren fehlschlug, ist inti bzw bei dir stunden = 0)

gruss mono


Das ist meine Signatur und sie wird wunderbar sein!

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Mono« (22. Januar 2010, 16:41)


stiffler2612

Registrierter Benutzer

  • »stiffler2612« ist der Autor dieses Themas

Beiträge: 15

Dabei seit: 25. November 2009

  • Private Nachricht senden

14

Freitag, 22. Januar 2010, 16:40

alles klar geht jetzt auch net mehr mit den minuten habsch wohl zuerst iwas übersehen ;) danke für die eklärung und die geduld du hast mir sehr geholfen!

werd mir das mit der allgemeinen form (sender etc..) dann nochmal genauer anguggen aber das prinzip ist mir dank dir nun endlich klar ;)

Social Bookmarks