2016-11-18 6 views
2

Ich bin sehr grundlegende BMI Calculator in C# und Win Forms mit VS 2012 zu bauen, auch ich bin ziemlich neu in C#. Ich habe einige Beispiele verfolgt und dieser Code sollte funktionieren, aber wenn Code ausgeführt wird, bekomme ich diese Fehler.Kann String nicht implizit konvertieren - C#

Error 3 Argument 1: cannot convert from 'System.Windows.Forms.TextBox' to 'string' c:\users\dell\documents\visual studio 2012\Projects\bmi_calc\bmi_calc\Form1.cs 44 31 bmi_calc 
Error 5 Argument 1: cannot convert from 'System.Windows.Forms.TextBox' to 'string' c:\users\dell\documents\visual studio 2012\Projects\bmi_calc\bmi_calc\Form1.cs 45 31 bmi_calc 
Error 1 Cannot implicitly convert type 'string' to 'System.Windows.Forms.TextBox' c:\users\dell\documents\visual studio 2012\Projects\bmi_calc\bmi_calc\Form1.cs 39 25 bmi_calc 
Error 2 The best overloaded method match for 'double.Parse(string)' has some invalid arguments c:\users\dell\documents\visual studio 2012\Projects\bmi_calc\bmi_calc\Form1.cs 44 17 bmi_calc 
Error 4 The best overloaded method match for 'double.Parse(string)' has some invalid arguments c:\users\dell\documents\visual studio 2012\Projects\bmi_calc\bmi_calc\Form1.cs 45 17 bmi_calc 

Hier ist mein Code:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace bmi_calc 
{ 
    public partial class Form1 : Form 
    { 
     double v; 
     double t; 
     double r; 


     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void textBox2_TextChanged(object sender, EventArgs e) 
     { 

     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 

     } 

     private void button2_Click(object sender, EventArgs e) 
     { 
      txtTezina.Clear(); //Btn that resets height and weight field values. 
      txtVisina.Clear(); 
      txtBmiRez = ""; 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      v = Double.Parse (txtVisina); 
      t = Double.Parse (txtTezina); 

      r = t/(v * v); 

      txtBmiRez.Text = String.Format("{0:f}", r); 

     } 

     private void button3_Click(object sender, EventArgs e) 
     { 
      Application.Exit(); // Close app 
     } 

    } 
} 

Wenn mir jemand das erklären könnte, würde ich ewig dankbar sein.

+0

sollten Sie die Texteigenschaft verwenden. Wenn es von vb6/vba kommt, gibt es kein Konzept der impliziten Texteigenschaft. –

+0

'v = Double.Parse (txtVisina.Text);' 't = Double.Parse (txtTezina.Text);' – Innat3

Antwort

5

Sowohl txtVisina und txtTezina sind TextBox Objekte, nicht die Zeichenfolgen, die in ihnen enthalten sind. Sie müssen die .Text-Eigenschaft verwenden, die von diesen Objekten kommt, um auf den Zeichenfolgenwert innerhalb der Benutzeroberfläche zuzugreifen.

Zum Beispiel:

v = Double.Parse (txtVisina.Text); 
t = Double.Parse (txtTezina.Text); 

und:

txtBmiRez.Text = ""; 

Witzigerweise Ihre zweite Nutzung von txtBmiRez ist eigentlich richtig.

Wenn es darum geht, doubles (oder ein beliebiges Objekt aus einer Zeichenkette) zu parsen, wird empfohlen, alle möglichen Fehler mit denen zu behandeln, die mit TryParse gemacht werden können. Parse würde eine Ausnahme auslösen, wenn die Zeichenfolgen keine gültigen Zahlen wären, wohingegen TryParsefalse zurückgeben würde. Zum Beispiel, wenn Sie Ihre Click-Methode, um so etwas wie dies von Vorteil ist, und würde das Potenzial für eine Krachen reduzieren:

private void button1_Click(object sender, EventArgs e) 
{ 
    if(Double.TryParse (txtVisina.Text, out v) && 
     Double.TryParse (txtTezina.Text, out t)) { 
     r = t/(v * v); 
     txtBmiRez.Text = String.Format("{0:f}", r); 
    } else { 
     // Handle failure to parse 
     MessageBox.Show("Failed to parse text to number."); 
    } 
} 
+0

Ich akzeptiere deine Antwort als korrekt, und es läuft ohne Fehler, aber immer wenn Sie versuchen, zu berechnen Werte Ich bekomme 0.00 Ergebnis, es ist ziemlich wierd, ich muss mein Matheformular überprüfen: D aber vielen Dank! – Goran

+0

@GoranStojanovic Kein Problem - denken Sie daran, dass Sie debuggen können, um sicherzustellen, dass die Werte korrekt sind, wenn Sie 'r' berechnen. Es könnte Ihr String-Format sein. Sie könnten immer 'txtBmiRez.Text = r.ToString (" F2 ");' –

1

Sie müssen auf die Eigenschaft eines TextBox zugreifen, um seinen Text zu erhalten. Sie versuchen, das Textfeld selbst zu übertragen.

Zum Beispiel statt

v = Double.Parse (txtVisina); 

folgende korrekt ist:

v = Double.Parse (txtVisina.Text); 
2

Die Variablen txtVisina und txtTezina sind TextBoxes aber Sie versuchen, sie als Zeichenketten zu verwenden. Alles, was Sie benötigen, ist ihre Text Eigenschaft, dh

v = Double.Parse (txtVisina.Text); 
t = Double.Parse (txtTezina.Text); 
1

Sie müssen die TextBox.Text Eigenschaft verwenden, um den Wert in dem Textfeld zum Beispiel einfache Fehler

string enteredValue = textbox1.Text; 

, trat zu erhalten machen, wenn Sie mit WinForms beginnen. Ich habe es sehr oft gemacht!

0

für die Fehler 3 und 5 müssen Sie. Text-Eigenschaft für die TextBoxen verwenden.

Um eine Zeichenfolge in eine Textbox zuweisen Sie folgende Syntax verwenden müssen:

textboxid.Text = ""; und wenn Sie ihm keinen Wert ohne Zeichenkette zuweisen möchten, verwenden Sie die .ToString() - Funktion, um eine Variable in eine Zeichenkette zu konvertieren, bevor Sie sie einem Textfeld zuweisen. zB int i = 10; Textbox1.Text = i.ToString();

Verwandte Themen