Frage zum Taschenrechner auf einer anderen Art
- VB.NET
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 38 Antworten in diesem Thema. Der letzte Beitrag () ist von jvbsl.
-
-
-
-
hallo n0ise,
n0ise schrieb:
Ja aber dann kommt der Fehler den ich im vorherigen Quellcode als Kommentar eschreiben hab! -.-
meinst du zu der frage mit dem screenshot?
wen ja probier mal das..
-
-
Passiert genau das gleiche..ist ja auch klar das er dann den Fehler anzeigt weil ein Leerzeichen keine Zahl ist..
Kann der nicht wenn man nichts in den TextBoxen eingibt den Code stoppen? Und wenn man was eingibt weiterlaufen lassen?
Hier genau das gleiche..
Außerdem:
Visual Basic Quellcode
If TextBox1.Text = "" OrElse TextBox2.Text = "" Then
MsgBox("Bitte ein Wert eingeben!")
End If
-
nö tut mir leid ist nicht dasselbe...
hier nochmal mit Trim optimiert, falls ein Spaßvogel Leerzeichen eingibt:
+anschließend noch wunderschön mit den .Net mitteln TryParse
VB.NET-Quellcode
- If TextBox1.Text.Trim() = "" OrElse TextBox2.Text.Trim() = "" Then
- MsgBox("Bitte ein Wert eingeben!")
- Exit Sub
- End If
- Dim x As Integer=0,y As Integer=0
- If Integer.TryParse(TextBox1.Text.Trim(),x) AndAlso Integer.TryParse(TextBox2.Text.Trim(),y)
- 'Hier deine rechenlogik mit x und y als Zahlen...
- Else
- MsgBox("Keine gültigen Zahlen")
- End If
Ich wollte auch mal ne total überflüssige Signatur:
---Leer--- -
VB.NET-Quellcode
- If IsNumeric(TextBox1.Text & TextBox2.Text) = False Then
- MessageBox.Show("Bitte Zahlen eingeben!")
- Exit Sub
- End If
- Dim x As Integer = CInt(TextBox1.Text)
- Dim y As Integer = CInt(TextBox2.Text)
- Dim ergebnis As Integer
- Select Case True
- Case CheckBox1.Checked
- ergebnis = x + y
- Case CheckBox2.Checked
- ergebnis = x - y
- Case CheckBox3.Checked
- ergebnis = CInt(x / y)
- Case CheckBox4.Checked
- ergebnis = x * y
- End Select
- MessageBox.Show("Das Ergebnis ist: " & ergebnis) ' Ergebnis anzeigen + Text
- End Sub
So hab ichs jetzt
Ok also Exit Sub heißt der Befehl =)
Nochne kurze Frage zum Schluss..ich habe gerad in mein VB.NET Buch die "Function" gerlernt und danach kommen die Prozeduren..
Also zur Frage: Eine Funktion ist doch eigentlich nur eine Zusammenfassung, was den gleichen Wert hat wie zB andere Variablen die man einzelnd Deklariern kann und mit dem Funktionsname verwenden kann?
So wie hier:
Hier wurden ja 2 Variablen Deklariert (Netto, MwSt) und man kann sie mit dem Namen Brutto aufrufen der auch als Decimal deklariert wurde?Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „n0ise“ ()
-
Hier wurden ja 2 Variablen Deklariert (Netto, MwSt) und man kann sie mit
dem Namen Brutto aufrufen der auch als Decimal deklariert wurde?
Netto und MwSt werden hierbei nur innerhalb der Funktion benutzt, bzw wird Brutto bei der Parameterübergabe Werte des angegebenen Typs erwarten. Die Intellisense wird dabei im Tooltip anzeigen, welcher Typ als jeweiliger Parameter erwartet wird.
Ähnliches hier:VB.NET-Quellcode
- Private Function AddiereIrgendwas(ByVal wert1 As Integer, ByVal wert2 As Integer)
- Dim summe As Integer = wert1 + wert2
- Return summe
- End Function
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- MsgBox(AddiereIrgendwas(10, 15).ToString)
- End Sub
Weitere Erklärungen kannst du sicherlich hier finden.Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Unwesen“ ()
-
Eine Funktion ist das gleiche wie eine Prozedur (Sub), mit dem Unterschied dass die Funktion einen Wert an den Aufrufer zurückgibt. Dein Beispiel verlangt die Übergabe zweier Dezimalzahlen um das Ergebnis mit Return zurückzugeben. Der Aufruf erfolgt dann mit:
Dann eins noch:Dieser Ausdruck TextBox1.Text & TextBox2.Text ist eine logische Verknüpfung, würde also die Texteigenschaften der beiden TBs mit & verknüpfen. Was kommt raus bei "Kamel" & "Fahrrad"? Evtl. ein Rad fahrendes Kamel. Das wird dann auf Isnumeric geprüft... Auch "12" & "10" ergibt kein logisches Ergebnis, da beide Werte kein Boolean sind.
Merke: & erwartet 2 Boolsche Werte (True/False), die miteinander verknüpft werden.
Deine Abfrage muß wie folgt aussehen:
Außerdem ist der Ansatz mit Tryparse intelligenter. In diesem Beitrag habe ich schonmal eine Variante zum Prüfen auf richtige Eingabe geschrieben. Die hat den Vorteil, dass Fehleingaben einfach nur ignoriert werden und keine nochmalige Eingabe erforderlich ist. Wenn du hier bei erfolgreicher Prüfung (z.B. TB.Text.Lenght > 0) einen boolschen Wert setzen würdest, hättest du alle Prüfungen erledigt. Deine Sub enthält damit nur noch das, was sie machen soll: Rechnen...
Fiel Fergnügen
Vatter
Edit: Oh Gott, was hab ich da geschrieben? Sry
Noch 5 kaffee, dann wird es hoffentlich besser.
& ist selbstverständlich KEINE logische Verknüpfung. Das funzt schon so, wie du es geschrieben hast, ich finde das andere aber schönerer.Seit 26.Mai 2012 Oppa!Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Vatter“ ()
-
Okay, und was hat ByVal und ByRef auf sich?
VB.NET-Quellcode
- Module Module1
- Sub Test(ByVal txt As String, _
- ByRef Netto As Decimal, _
- ByRef Preis As Decimal)
- ' Ändere die Werte
- txt = "Neuer Text"
- Netto = 15.0
- Preis = 16.0
- End Sub
- Sub Main()
- Dim Text As String = "Alter text"
- Dim Wert1 As Decimal = 0.0
- Dim Wert2 As Decimal = 0.0
- Console.WriteLine(Text & " " & _
- Wert1.ToString() & " " & _
- Wert2.ToString())
- Test(Text, Wert1, Wert2)
- Console.WriteLine(Text & " " & _
- Wert1.ToString() & " " & _
- Wert2.ToString())
- Console.ReadLine()
- End Sub
- End Module
Hier hat es doch die Bedeutung das zb hier:
Das wegen ByVal das "Programm" nicht mitkriegt das es geändert wurde in "Alter Text" ?
Und was is mit ByRef? -
-
Guckst du hier, da solltest du Antworten finden.
Übrigens," Das wegen ByVal das "Programm" nicht mitkriegt das es geändert wurde in "Alter Text" ? "
-
-
ich hoffe nicht denn das war eines der wenigen vernünftigen Lösungen von hierGruß Mangafreak
-
Meiner wurde es wohl auch...
Ehrlich gesagt war das ebenfalls bereits C&P.
BTW: Trim() ist bei TryParse() meines Wissens nach unnötig (selbes Ergebnis).
Und: Wenn keine Eingabe erfolgt ist, schlägt TryParse ebenfalls Alarm, sodass man direkt keine Eingabe und ungültige Eingabe abfängt.
BTW2: ByRef macht eigentlich nur Sinn, wenn der übergebene Wert sehr Groß ist (da ByVal kopiert) oder wenn der Wert durch die Sub/ Function geändert werden soll.
BTW3: Strings sind leer, wenn .Length = 0 gilt. das ist schneller und sauberer. Wenn unbedingt der Text genommen werden soll, dann mit String.Empty statt "":
-
Ich habe mal eine Funktion geschrieben die solange eine eigens gerierte Liste an IFormatStyles durchgeht bis es eine Lösung hat. Der Nachteil daran war dass es auch eine Eingabe hätte geben können die dann falsch interpretiert wird und somit falsch umgerechnet. Dann kann man sich bei der Usereingabe aber halbwegs sicher sein, dass es NICHT an dem Programmierer liegt, dass nichts gerechnet werden kann.Gruß Mangafreak
-
FAtheone schrieb:
BTW2: ByRef macht eigentlich nur Sinn, wenn der übergebene Wert sehr Groß ist (da ByVal kopiert) oder wenn der Wert durch die Sub/ Function geändert werden soll.
ByRef macht nur in deinem 2. Fall Sinn. Egal ob im Decimal 1.2 steht oder 4938290693456.43986593499652693, es wird immer der gleiche Platz verbraucht.
lg SeriTools -
BTW: Trim() ist bei TryParse() meines Wissens nach unnötig (selbes Ergebnis).
Man hat aber dann keine Unterscheidung von Ungültige Eingabe zu keine Eingabe - Gut man hätte es beim schließlichen TryParse noch weglassen können...
BTW3: Strings sind leer, wenn .Length = 0 gilt. das ist schneller und sauberer. Wenn unbedingt der Text genommen werden soll, dann mit String.Empty statt "":
String.Empty und "" sind identisch, es macht keinen unterschied, es sind beides Konstanten...Ich wollte auch mal ne total überflüssige Signatur:
---Leer---
-
Benutzer online 2
2 Besucher
-
Ähnliche Themen