Berechnung mit TextBox statt ValueBox

Alle Fragen zur Programmierung, die nicht in die speziellen Themen passen
Benutzeravatar
bauer
Foriker
Beiträge: 18
Registriert: Sa 25. Mai 2013, 14:17
Kontaktdaten:

Berechnung mit TextBox statt ValueBox

Beitrag von bauer » Mi 20. Dez 2017, 18:40

Hallo zusammen,

nach längerer Gambas3-Abstinenz habe ich mal wieder ein paar Probleme.
Ich schreibe diverse Berechnungsprogramme unter Verwendung von ValueBoxen als Ein- und Ausgabe.

Beispiel 1 - Addition mit ValueBox (funktioniert eigentlich sehr gut, nur die Null als Vorauswahl stört mich):

Code: Alles auswählen

Public Sub Button1_Click()
  Dim a As Float        'Summand a
  Dim b As Float        'Summand b
  Dim ergebnis As Float 'Ergebnis
  
  a = ValueBox1.Value
  b = ValueBox2.Value
  ergebnis = ValueBox3.Value

  ValueBox3.Value = a + b
End
Nun stört mich aber die Null (0) in der ValueBox und da dachte ich mir, versuchste es mal mit den TexBoxen. Jedoch tauchen da wieder Probleme mit der Typenunverträglichkeit auf. Das macht mich noch ganz gaga.

Auch scheint die TextBox das Dezimalkomma nur als Punkt zu akzeptieren.

Beispiel 2 - Addition mit TextBox (hier verstehe ich nur Bahnhof):

Code: Alles auswählen

Public Sub Button2_Click()
  Dim a As Float          'Summand a
  Dim b As Float          'Summand b
  Dim ergebnis As Variant 'Ergebnis
  
  a = TextBox1.Text
  b = TextBox2.Text
  ergebnis = TextBox3.Text
  
  TextBox3.Text = a + b
End
Wie bekomme ich es nun hin, dass ich mit den Textboxen genauso rechnen kann, wie mit den ValueBoxen?

MFG

Benutzeravatar
gambi
Moderator
Beiträge: 314
Registriert: Mi 8. Mai 2013, 21:46
Kontaktdaten:

Re: Berechnung mit TextBox statt ValueBox

Beitrag von gambi » Mi 20. Dez 2017, 19:39

Hallo bauer,
bei Textboxen musst du natürlich sehen, dass die Eingaben für deinen Anwendungsfall valide sind.
Ich glaube das hier im Gambas-Buch https://gambas-buch.de/dw/doku.php?id=k ... .6.3:start hilft dir weiter.

gg

Benutzeravatar
4tionov
Site Admin
Beiträge: 232
Registriert: So 18. Mai 2014, 22:40
Kontaktdaten:

Re: Berechnung mit TextBox statt ValueBox

Beitrag von 4tionov » Mi 20. Dez 2017, 19:50

bauer hat geschrieben:
Mi 20. Dez 2017, 18:40
Wie bekomme ich es nun hin, dass ich mit den Textboxen genauso rechnen kann, wie mit den ValueBoxen?
So:

Code: Alles auswählen

Public Sub Button1_Click()

    Dim Ergebnis As Float

    Ergebnis = Val(TextBox1.Text) + Val(TextBox2.Text)

    TextBox3.Text = Str(Ergebnis)

End
Val macht aus String Float und Str macht aus Float oder Integer String. Dabei internationalisiert Gambas korrekt je nach den Spracheinstellungen des Benutzers.

http://gambaswiki.org/wiki/lang/val
http://gambaswiki.org/wiki/lang/str
Alles Gute,

4tionov

Benutzeravatar
bauer
Foriker
Beiträge: 18
Registriert: Sa 25. Mai 2013, 14:17
Kontaktdaten:

Re: Berechnung mit TextBox statt ValueBox

Beitrag von bauer » Mi 20. Dez 2017, 20:56

Erstmal Danke für die Infos.

Bei längeren/koplexeren Formeln, die bei mir so vorkommen, hieße das also, dass ich immer mit einer Verkettung "Val(TextBox1.Text)" arbeiten müsste, also z.B. bei der Formel r2 = e^(2 * e0 * er * l * pi / c) * r1 eine ziemlich lange Zeichenkette im Code hätte!?

Ich muss das mal langsam und in Ruhe durchprobieren und verstehen.

Benutzeravatar
gambi
Moderator
Beiträge: 314
Registriert: Mi 8. Mai 2013, 21:46
Kontaktdaten:

Re: Berechnung mit TextBox statt ValueBox

Beitrag von gambi » Mi 20. Dez 2017, 22:40

Hallo,
dann nochmals der Tipp einen Blick ins Gambas-Buch zu werfen: https://gambas-buch.de/dw/doku.php?id=k ... .8.2:start
Bild

gg

Benutzeravatar
4tionov
Site Admin
Beiträge: 232
Registriert: So 18. Mai 2014, 22:40
Kontaktdaten:

Re: Berechnung mit TextBox statt ValueBox

Beitrag von 4tionov » Mi 20. Dez 2017, 23:32

bauer hat geschrieben:
Mi 20. Dez 2017, 20:56
Bei längeren/koplexeren Formeln, die bei mir so vorkommen, hieße das also, dass ich immer mit einer Verkettung "Val(TextBox1.Text)" arbeiten müsste, also z.B. bei der Formel r2 = e^(2 * e0 * er * l * pi / c) * r1 eine ziemlich lange Zeichenkette im Code hätte!?
Nein gar nicht, ich hatte nur das Beispiel verkürzt, um Dir die Verwendung von Val und Str zu zeigen.

Selbstverständlich ist es intelligenter, mit Variablen zu arbeiten, die richtig zu benennen und die Controls passend zu benennen. Du kannst das Gleiche auch so machen, und hier wird der Code durch die Verwendung von richtigen Variablennamen selbsterklärend:
gambas code
Public Sub btHuehneraugenBerechnen_Click()

    Dim fHuehner, fAugen, fHuehneraugen As Float

    fHuehner = Val(txtHuehner.Text)
    fAugen = Val(txtAugen.Text)

    fHuehneraugen = fHuehner * fAugen

    txtHuehneraugen.Text = Str(fHuehneraugen)

End
Wenn du später mal deinen Code ansiehst, wirst du sehen, wie immens wichtig es ist, den Variablen und den Controls Namen zu verpassen, die ihre Bedeutung beschreiben. Dann lässt sich der Code "lesen" und du musst nicht lange Dokumentation schreiben, was e, e0 , c, pi usw. bedeuten.

Das Ganze in einem kleinen Gambas Projekt:
Huehneraugenberechnen.tar.gz
(23.05 KiB) 33-mal heruntergeladen
Alles Gute,

4tionov

Benutzeravatar
bauer
Foriker
Beiträge: 18
Registriert: Sa 25. Mai 2013, 14:17
Kontaktdaten:

Re: Berechnung mit TextBox statt ValueBox

Beitrag von bauer » Do 21. Dez 2017, 14:33

Hallo 4tionov,

ich werde meinen Code - deinem Beispiel folgend - umschreiben.
Vorausahnend sehe ich ein weiteres Problem auf mich zukommen, aber da hat gambi etwas zu verlinkt. Und zwar geht es da um die in meinem Fall ungewollten Buchstaben oder Zeichen, die nicht in die TextBox gehören.

Die alte Version habe ich mal angehängt und die neue wird dann folgen.
Dateianhänge
quadrat_alt-0.0.1.tar.gz
Alte Version mit ValueBoxen als Ein- und Ausgabe
(12.04 KiB) 34-mal heruntergeladen

Benutzeravatar
4tionov
Site Admin
Beiträge: 232
Registriert: So 18. Mai 2014, 22:40
Kontaktdaten:

Re: Berechnung mit TextBox statt ValueBox

Beitrag von 4tionov » Do 21. Dez 2017, 17:44

Hallo Bauer,

also das finde ich vollkommen ok:
gambas code
  a = valueBox_a.Value 'Kantenlänge a
  d = valueBox_d.Value 'Diagonale d
  f = valueBox_f.Value 'Flächeninhalt f
  u = valueBox_u.Value 'Umfang u
Die Funktion ist nur kurz, es sind nur wenige Variablen, die per Kommentar erklärt sind, da kann man schon mal Variablennamen wählen, die nur aus einem Buchstaben bestehen. Ich dachte, das sei umfangreicher. Wenn der Code z.B. hundert Zeilen lang ist und zwanzig Variablen verwendet, dann sollte man die Benennung so machen, dass an jeder Stelle klar ist, was die Variable darstellt. Hier denke ich, wäre das unnötige Fleißarbeit ... :-)

Es geht mir um das Begreifen eines Stück Codes ... später (wenn du z.B. nach einem halben Jahr wieder rangehst). Das, was Du hier zeigst, ist für mich selbsterklärend genug.
Alles Gute,

4tionov

Benutzeravatar
bauer
Foriker
Beiträge: 18
Registriert: Sa 25. Mai 2013, 14:17
Kontaktdaten:

Re: Berechnung mit TextBox statt ValueBox

Beitrag von bauer » Do 21. Dez 2017, 18:53

4tionov hat geschrieben:
Do 21. Dez 2017, 17:44
Ich dachte, das sei umfangreicher.
Insgesamt ist es auch (etwas) umfangreicher. Ich habe nur das Unterprogramm 'Quadrat' gewählt und den Code für das Forum etwas gekürzt. Es werden noch die Formeln nach einer Berechnung angezeigt und eine Skizze. Ausserdem ein PDF mit eingebunden, etc.
Es ist so eine art Berechnungsprogramm mit Unterprogrammen. Es soll primär für Schüler sein. Hier speziell Planimetrie, Stereometrie. Später dann noch lineare und quadratische Gleichungen und Funktionen. Sekundär Berechnungsprogramme für Elektronik und Amateurfunk. Was mir dabei wichtig ist, ist, dass bei den Berechnungen in alle sinnvolle Richtungen gerechnet wird.
Mittlerweile bin ich dazu übergegangen, die Formeln nicht mehr schriftlich umzustellen, sondern benutze dazu wxMaxima und frickele mir den Output dann entsprechend für Gambas3 zusammen.
Wenn ich die größten Probleme gelöst habe und das als Beta-Version kennzeichne, dann lade ich das Projekt mal hier ins Forum. Aber da vergehen wohl noch Monate, so wie ich mich kenne.

Benutzeravatar
bauer
Foriker
Beiträge: 18
Registriert: Sa 25. Mai 2013, 14:17
Kontaktdaten:

Re: Berechnung mit TextBox statt ValueBox

Beitrag von bauer » Fr 22. Dez 2017, 14:06

Hallo zusammen,

einen Teilerfolg konnte ich bisher erreichen. Allerdings bekomme ich die Fehlermeldung

Code: Alles auswählen

Typenunverträglichkeit: Erwartet Float, stattdessen Null erhalten
wenn ich bei den gesuchten Werten (die ja als Ausgabe dienen sollen) nichts eingebe.

Wenn ich für a einen Wert eingebe und für d,f und u eine 0, dann funktioniert es. Irgendwie klemmt es da an der if-Abfrage.

Habe es auch schon mit

Code: Alles auswählen

If a > 0 Then ... 
versucht, aber auch dann Fehlermeldung
gambas code
Public Sub btn_calc_Click()
  
  Dim a, d, f, u As Float
  
  a = Val(textBox_a.Text) 'Kantenlänge a
  d = Val(textBox_d.Text) 'Diagonale d
  f = Val(textBox_f.Text) 'Flächeninhalt f
  u = Val(textBox_u.Text) 'Umfang u
  
  'gegeben: a
  'gesucht: d, f, u
  If a > 0 And d = 0 And f = 0 And u = 0 Then
    d = a * Sqr(2)
    f = a ^ 2
    u = 4 * a
    textBox_d.Text = Str(d)
    textBox_f.Text = Str(f)
    textBox_u.Text = Str(u)
  Endif

End

besenmuckel
Foriker
Beiträge: 74
Registriert: Di 4. Nov 2014, 21:11
Kontaktdaten:

Re: Berechnung mit TextBox statt ValueBox

Beitrag von besenmuckel » Sa 23. Dez 2017, 00:37

Dieses Beispiel für a gibt eine Meldung aus wenn noch ein Wert fehlt.

Code: Alles auswählen

  If a = Null Then
    Message.Info("Zur Brechnung muss noch die Kantenlänge angegeben werden!")
    Return
  Endif
Statt Message.Info und Return kannste auch machen a = 0, wenn es für die Berechnung nicht erforderlich ist.

Code: Alles auswählen

  If a = Null Then
    a = 0
  Endif
Für TextBox - siehe auch Tip des Tages Nr.8 über Gambas->Menü->Fragezeichen zu erreichen.

Code: Alles auswählen

  If Not textBox_a.Text Then
    textBox_a.Text = 0
  Endif
oder auch

Code: Alles auswählen

  If Not textBox_a.Text Then
    a = 0
  Endif

besenmuckel
Foriker
Beiträge: 74
Registriert: Di 4. Nov 2014, 21:11
Kontaktdaten:

Re: Berechnung mit TextBox statt ValueBox

Beitrag von besenmuckel » Sa 23. Dez 2017, 01:57

Typenunverträglichkeit: Erwartet Float, stattdessen Null erhalten
Ja wenn in der TextBox nix steht gib es Null und kann deshalb auch nicht umwandeln in Float!
Für dein Beispiel kannste es ja so in etwa machen.

Code: Alles auswählen

Public Sub btn_calc_Click()
  
  Dim a, d, f, u As Float
  
  If Not textBox_a.Text Then
    Message.Info("Zur Brechnung muss noch die Kantenlänge angegeben werden!")
    Return
  Else
    a = Val(textBox_a.Text) 'Kantenlänge a
  Endif
  If Not textBox_d.Text Then
    d = 0
  Endif
  If Not textBox_f.Text Then
    f = 0
  Endif
  If Not textBox_u.Text Then
    u = 0
  Endif
  
  'gegeben: a
  'gesucht: d, f, u
  If a > 0 And d = 0 And f = 0 And u = 0 Then
    d = a * Sqr(2)
    f = a ^ 2
    u = 4 * a
    textBox_d.Text = Str(d)
    textBox_f.Text = Str(f)
    textBox_u.Text = Str(u)
  Endif
  
End
Zuletzt geändert von besenmuckel am Sa 23. Dez 2017, 02:16, insgesamt 1-mal geändert.

Benutzeravatar
bauer
Foriker
Beiträge: 18
Registriert: Sa 25. Mai 2013, 14:17
Kontaktdaten:

Re: Berechnung mit TextBox statt ValueBox

Beitrag von bauer » Sa 23. Dez 2017, 02:11

Danke besenmuckel,

mit deinem Beispiel funktioniert es jetzt.

Code: Alles auswählen

  If Not textBox_variable.Text Then
    variable = 0
  Endif
Es wollte einfach vorher nicht rechnen, wenn die Felder ausser a leer waren. Wenn ich das jetzt richtig verstehe, dann sagt man mit der obigen if-Abfrage, dass ein leeres Feld zur Zahl 0 gemacht werden soll und nur dann funktioniert die Berechnung!?

besenmuckel
Foriker
Beiträge: 74
Registriert: Di 4. Nov 2014, 21:11
Kontaktdaten:

Re: Berechnung mit TextBox statt ValueBox

Beitrag von besenmuckel » Sa 23. Dez 2017, 02:24

Ja wenn TextBox leer dann wird die Variable auf 0 gesetzt. Sonst würde das umwandeln von String in Float nicht funktionieren.
Auch könnte man noch einbauen das nur Zahleneingabe erlaubt ist. Sonst würde auch wieder Fehlermeldung kommen wenn man aus Versehen statt der 0 ein o gemacht hat. Dann würde das umwandeln von String in Float nicht funktionieren.
Damit bei der Kantenlänge nur Zahlen, Komma, BackSpace oder Enfernungstaste benutzt werden dürfen, kannste es ja mal so testen.

Code: Alles auswählen

Public Sub textBox_a_KeyPress()
  
  If key.Code >= 48 And key.Code <= 57 Or key.Code = 44 Then 
  Else If key.Code = key.BackSpace Then 
  Else If key.Code = key.Delete Then 
  Else 
    Stop Event 
    Message.Info("Nur Eingabe von Zahlen und Komma erlaubt!", "OK")
  Endif 
  
End

Benutzeravatar
bauer
Foriker
Beiträge: 18
Registriert: Sa 25. Mai 2013, 14:17
Kontaktdaten:

Re: Berechnung mit TextBox statt ValueBox

Beitrag von bauer » Di 20. Feb 2018, 01:01

Hallo zusammen,

ich muss den Thread nochmal ausgraben, denn ich komme doch nicht weiter.

Es will einfach nicht rechnen. Habe schon alle möglichen Varianten ausprobiert. Offenbar bin ich begriffsstutzig.

In diesem Beispiel (habe es auf das nötigste verkürzt) soll entweder die Kantenlänge oder der Umfang berechnet werden. ich bekomme es einfach nicht hin.

Folgende Elemente habe ich platziert:
  • TextBox1
  • Textbox1
  • Button1
  • Button2
gambas code
' Gambas class file

Public Sub Form_Open()
  Me.Center
  Me.Caption = "Quadrat"
  TextBox1.SetFocus
End

Public Sub Button1_Click()
  Dim a, u As Float

  a = TextBox1.Text 'Kantenlänge a
  u = TextBox2.Text 'Umfang u
  
   If Not TextBox1.Text Then
     a = 0
   Endif
   
   If Not TextBox2.Text Then
     u = 0
   Endif

  'Berechne, wenn a>0 den Umfang
  If a > 0 Then
    u = 4 * a
    TextBox2.Text = Str(u)
  Endif
  
  'Berechne, wenn u>0 die Kantenlänge
  If u > 0 Then
    a = u / 4
    TextBox1.Text = Str(a)
  Endif
End

Public Sub Button2_Click()
  TextBox1.Text = ""
  TextBox2.Text = ""
  TextBox1.SetFocus
End

Viele Grüße

Antworten

Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 10 Gäste