Autor Beitrag
Muetze187
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Fr 10.09.10 20:08 
Hallo Gemeinde! :)

Ich habe mal eine Frage zum obigen Thema.
Im Moment behandele ich in meinem "Kurs" die Exceptions.
Ein zuvor erstellter Taschenrechner soll nun um Ausnahmebehandlungen erweitert werden. Soweit so gut.
Bisher wurden die Zahlen in der Textbox in der ButtonBerechnen_Click Methode konvertiert.
ausblenden C#-Quelltext
1:
2:
zahl1 = Convert.ToSingle(textBoxZahl1.Text);
zahl2 = Convert.ToSingle(textBoxZahl2.Text);


Das lief auch soweit alles richtig.
Nun soll ich aber die Konvertierung in einer eigenen Methode vornehmen. Das man den Typ des Steuerelemnts als Parameter und den Namen des Steuerelements als Argument
angeben muss, wurde mir als Tipp mitgegeben. Bisher habe ich folgendes in der Methode:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
private float Konvert(TextBox wert2)
        {
            float wert1 = 0;
            try
            {
               wert1 = Convert.ToSingle(wert2.Text);
               
            }
            catch (FormatException)
            {
                MessageBox.Show("Es ist ein Konvertierungsfehler aufgetreten!""FEHLER!");
            } 
            return wert1;
}


Evtl. Konvertierungsfehler werden abgefangen aber, was mache ich mit dem zurückgelieferten Wert?
Wenn ich ihn in irgendeiner Weise an zahl1 übergeben will, motzt der compiler(wahrscheinlich zu Recht ;)) rum, dass er den Typ nicht umwandeln kann.
Kann das sein, dass textBoxZahl1.Text bzw. textBoxZahl2.Text garnicht in Single konvertiert wurde?

Ich bitte um Hilfe und ich danke im Voraus :)


Mfg
mütze
Christoph1972
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: Fr 10.09.10 20:24 
Such mal in der Hilfe nach Single.TryParse(....)

Da wirst du eine deutlich bessere Lösung finden. Das mit TryCatch zu machen ist Müll. Noch besser ist eine TextBox, die keine fehlerhaften Eingaben zulässt :D

_________________
Gruß
Christoph
Muetze187 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Fr 10.09.10 20:27 
Danke für die Antwort.
Soweit bin ich aber noch nicht im "Kurs" :)
Ich soll mit try...catch arbeiten und alles machen, so wie beschrieben. Werd mich aber mal schlau machen in der Richtung :)


Mfg
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 10.09.10 20:42 
Was genau ist jetzt das Problem, die Zuweisung an zahl1? Dann zeig die doch bitte mal ;) .

_________________
>λ=
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 10.09.10 20:43 
Ist den zahl1 überhaupt ein float (aka single)?
Muetze187 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Fr 10.09.10 20:59 
Naja, ich kann jetzt in der Methode ButtonBerechnen_Click, in der die Methode Konvert aufgerufen wird (übergeben wird übrigens textBoxZahl1 bzw. textBoxZahl2), nicht den zurückgelieferten Wert zuweisen. Folgendes habe ich versucht:
ausblenden C#-Quelltext
1:
2:
zahl1 = textBoxZahl1;
zahl1 = textBoxZahl1.Text;

aber auch:
ausblenden C#-Quelltext
1:
2:
ergebnis = textBoxZahl1 + textBoxZahl2;
ergebnis = textBoxZahl1.Text + textBoxZahl2.Text;


Bringen immer Konvertierungsfehler. Deswegen glaube ich fast, dass in der Methode Konvert garnicht konvertiert wird...



Mfg
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 10.09.10 21:50 
Nochmal von welchem Typ ist den Zahl1 bzw. in deinem jetzigen Code Ergebnis? Deine Methode Konvert ist soweit korrekt, wenn man "liefert einen float zurück wenn in einer übergebenen Textbox ein als float darstellbarer Text steht ansonsten 0" - als korrekt bezeichnen will( ich würde das überflüssig nennen).

Du kannst nur Dinge einander zuweisen die auch vom gleichen Typ sind. Genauso wie du nur Dinge addieren kannst die eine Addition mit den beteiligten Typen als Operator kennen . Dein gezeigtes Textbox+Textbox macht also genauso wenig Sinn.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4796
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 11.09.10 09:02 
Hallo Muetze187,

du mußt selbstverständlich dann deine eigene Methode aufrufen:
ausblenden C#-Quelltext
1:
2:
3:
zahl1 = Konvert(textBoxZahl1.Text);
zahl2 = Konvert(textBoxZahl2.Text);
ergebnis = zahl1 + zahl2;
Muetze187 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Sa 11.09.10 18:17 
Ja danke euch allen. :)

Th69 hatte die richtige Lösung. Irgendwie ganz einfach wenn mans weiß :)


Mfg
Sizoberz
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Do 28.07.11 18:58 
Komisch ... habe das gleiche Problem, aber wie beschrieben funktioniert das bei mir nicht.
Bekomme folgende Fehlermeldungen:

Fehler 1 Die beste Übereinstimmung für die überladene Taschenrechner.Form1.Konvert(System.Windows.Forms.TextBox)-Methode hat einige ungültige Argumente.
...\Taschenrechner\Taschenrechner\Form1.cs 44 21 Taschenrechner

Fehler 2 1-Argument: Kann nicht von "string" in "System.Windows.Forms.TextBox" konvertiert werden.
...\Taschenrechner\Taschenrechner\Form1.cs 44 29 Taschenrechner

Wäre für Hilfe dankbar ...
Hanspeter Thöni
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Do 28.07.11 19:17 
So wie es aussieht, willst du einen String übergeben. Die Methode erwartet aber ein Text-Box Objekt.

Gruss Hanspeter
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4796
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 28.07.11 19:29 
Hallo,

ich habe noch mal meinen Beitrag angeschaut und gesehen, daß dieser nicht zur obigen Konvert-Methode paßt, weil ich davon ausgegangen bin, daß man nur den Text als String übergibt, also:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
private float Konvert(string text)
{
    float wert = 0;
    try
    {
        wert = Convert.ToSingle(text);
    }
    catch (FormatException)
    {
         MessageBox.Show("Es ist ein Konvertierungsfehler aufgetreten!""FEHLER!");
    } 
    return wert;
}