[C#] Decimal in String

Hallo,

wie kann ich Decimal in einen String umwandeln? System.Convert.ToDecimal gibt es ja auch, aber bei System.Convert.ToString meldet der CSC immer:
main.cs(142,21): error CS0029: Cannot implicitly convert type 'decimal' to 'string'
main.cs(143,21): error CS0029: Cannot implicitly convert type 'decimal' to 'string'
 
Immer noch nicht.
main.cs(142,21): error CS0029: Cannot implicitly convert type 'decimal' to 'string'
main.cs(143,21): error CS0029: Cannot implicitly convert type 'decimal' to 'string'
Die Zeilen:
Code:
             string v1_x = v1x_koo.Text;string v1_y = v1y_koo.Text;
             string v2_x = v2x_koo.Text;string v2_y = v2y_koo.Text;
             decimal v1x = Convert.ToDecimal(v1_x);decimal v1y = Convert.ToDecimal(v1_y);
             decimal v2x = Convert.ToDecimal(v2_x);decimal v2y = Convert.ToDecimal(v1_y);
             decimal x = 0;decimal y = 0;string x_s;string y_s;
             
             x = v1x + v2x;
             y = v1y + v2y;
             
             x_s = x.ToString();
             y_s = y.ToString();
             
             ergebnis.Text = x;
             ergebn_y.Text = y;
 
Könntest du eventuell mal deine Nummerierung vor die Zeilen machen oder uns sagen, was Zeile 142 und 143 sind?

Ich vermute ja mal, dass es
Code:
             ergebnis.Text = x;
             ergebn_y.Text = y;
sind. Wenn das stimmt, dann versuchst du einem Textfeld o.ä. einen Decimal zuzuweisen. Dabei hast du dir diese Werte doch vorher extra in x_s und y_s gespeichert, also weise doch diese Werte zu:
Code:
             ergebnis.Text = x_s;
             ergebn_y.Text = y_s;
 
Ich habe den Fehler schon gefunden.
Es sollte heißen:
Code:
ergebnis.Text = x.ToStrng();
Allerdings habe ich jetzt folgendes Problem:
main.cs(282,40): error CS0117: 'decimal' does not contain a definition for 'Text'
main.cs(282,73): error CS0117: 'decimal' does not contain a definition for 'Text'
Code:
[B]decimal px = Convert.ToDecimal(px.Text), py = Convert.ToDecimal(py.Text);[/B]
                 decimal vx = Convert.ToDecimal(v11_koo.Text), vy = Convert.ToDecimal(v12_koo.Text);
                 decimal x2, y2;
                 x2 = vx + px;
                 y2 = vy + py;
                 
                 erg_spz1.Text = x2.ToString();
                 erg_spz2.Text = y2.ToString();
Die entsprechende Zeile ist fett markiert.
 
Du darfst an der Stelle ja nicht schreiben px.Text bzw. py.Text sondern vlx_koo.Text oder halt die entsprechnende Textbox.
 
Sehr witzig :rolleyes:
px und py sind Eingabefelder!
Aber mal der komplette Code:
Code:
using System;
using System.Drawing;
using System.Windows.Forms;

namespace Programm{
    public class SteuerelementeForm : System.Windows.Forms.Form
    {
        private TextBox v1x_koo, v1y_koo;
        private TextBox v2x_koo, v2y_koo;
        private TextBox ergebnis, ergebn_y;
        private TextBox px, py;
        private TextBox v11_koo, v12_koo;
        private TextBox erg_spz1, erg_spz2;
        private Label p, p2;
        private Label v11, v12;
        private Label v1x,v1y;
        private Label v2x,v2y;
        private Label erg_x, erg_y;
        private Button ergebns, spitze;
        private MainMenu mainMenu;
        private MenuItem vektoradditionMenu;
        private MenuItem spitzeberechnenMenu;
        private MenuItem beendenMenu;
        private MenuItem helpMenu;
        
        public SteuerelementeForm()
        {
             Name = "VektorForm";
             Text = "Vektoren";
             Font = new Font("Arial", 9F, (FontStyle.Bold), GraphicsUnit.Point, ((System.Byte)(0)));
             FormBorderStyle = FormBorderStyle.FixedDialog;
             Location = new Point(0,0);
             Size = new Size(500,300);
             Komponenten();
         }
         private void Komponenten()
         {
             mainMenu = new MainMenu();
             vektoradditionMenu = new MenuItem();
             spitzeberechnenMenu = new MenuItem();
             beendenMenu = new MenuItem();
             helpMenu = new MenuItem();
             
             helpMenu.Index = 3;
             helpMenu.Text = "?";
             helpMenu.Click += new EventHandler(help_click);
             
             beendenMenu.Index = 2;
             beendenMenu.Text = "Beenden";
             beendenMenu.Click += new EventHandler(beendenMenu_Click);
             
             spitzeberechnenMenu.Index = 1;
             spitzeberechnenMenu.Text = "Spitze berechnen";
             spitzeberechnenMenu.Click += new EventHandler(spitzeberechnenMenu_Click);
             
             vektoradditionMenu.Index = 0;
             vektoradditionMenu.Text = "Vektoraddition";
             vektoradditionMenu.Click += new EventHandler(vektoradditionMenu_Click);
             
             mainMenu.MenuItems.Add(vektoradditionMenu);
             mainMenu.MenuItems.Add(spitzeberechnenMenu);
             mainMenu.MenuItems.Add(beendenMenu);
             mainMenu.MenuItems.Add(helpMenu);
             
             Menu = mainMenu;
         }
         public static void Main()
         {
             Console.Write("Starte Programm ...\n");
              Application.Run(new SteuerelementeForm());
         }
         private void beendenMenu_Click(object sender, EventArgs e){
             Console.Write("Beenden ...");
             Close();
         }
         private void vektoradditionMenu_Click(object sender, EventArgs e){
             v1x = new Label();
              v1y = new Label();
              v2x = new Label();
              v2y = new Label();
              erg_x = new Label();
              erg_y = new Label();
              v1x_koo = new TextBox();
              v1y_koo = new TextBox();
              v2x_koo = new TextBox();
              v2y_koo = new TextBox();
              ergebnis = new TextBox();
              ergebn_y = new TextBox();
             ergebns = new Button();
             
             Controls.Add(v1x_koo);
            Controls.Add(v1y_koo);
            Controls.Add(v1x);
            Controls.Add(v1y);
             
             v1x.Name = "v1";
             v1x.Text = "Vektor 1 (x): ";
             v1x.Location = new Point(8,10);
             v1x.Size = new Size(120,20);
             v1y.Name = "v1";
             v1y.Text = "Vektor 1 (y): ";
             v1y.Location = new Point(8,40);
             v1y.Size = new Size(120,20);
             
             v2x.Name = "v2";
             v2x.Text = "Vektor 2 (x): ";
             v2x.Location = new Point(200,10);
             v2x.Size = new Size(120,20);
             v2y.Name = "v2";
             v2y.Text = "Vektor 2 (y): ";
             v2y.Location = new Point(200,40);
             v2y.Size = new Size(120,20);
                 
            erg_x.Name = "ergebnis";
             erg_x.Text = "Ergebnis (x)";
             erg_x.Location = new Point(10,100);
             erg_x.Size = new Size(120,20);
             erg_y.Name = "ergebnis";
             erg_y.Text = "Ergebnis (y)";
             erg_y.Location = new Point(10,130);
             erg_y.Size = new Size(120,20);             
                     
             v1x_koo.Name = "Vektor1_x";
             v1x_koo.Text = "";
             v1x_koo.Location = new Point(90, 8);
             v1x_koo.Size = new Size(90,20);
             v1y_koo.Name = "Vektor1_y";
             v1y_koo.Text = "";
             v1y_koo.Location = new Point(90, 38);
             v1y_koo.Size = new Size(90,20);
                         
             v2x_koo.Name = "Vektor2_x";
             v2x_koo.Text = "";
             v2x_koo.Location = new Point(280, 8);
             v2x_koo.Size = new Size(90,20);
             v2y_koo.Name = "v2";
             v2y_koo.Text = "";
             v2y_koo.Location = new Point(280, 38);
             v2y_koo.Size = new Size(90,20);
             
             ergebnis.Name = "Ergebnis";
             ergebnis.Text = "";
             ergebnis.Location = new Point(90,98);
             ergebnis.Size = new Size(90,20);
             ergebnis.Enabled = false;
             ergebn_y.Name = "Ergebnis";
             ergebn_y.Text = "";
             ergebn_y.Location = new Point(90,128);
             ergebn_y.Size = new Size(90,20);
             ergebn_y.Enabled = false;
             
             ergebns.Name = "Berechnen";
             ergebns.Text = "&Berechnen";
             ergebns.Location = new Point(200,98);
             ergebns.Size = new Size(90,20);
             ergebns.Click += new EventHandler(ergebns_click);
             
             Controls.Remove(p);
             Controls.Remove(p2);
             Controls.Remove(v11);
             Controls.Remove(v12);
             Controls.Remove(px);
             Controls.Remove(py);
             Controls.Remove(v11_koo);
             Controls.Remove(v12_koo);
             Controls.Remove(erg_spz1);
             Controls.Remove(erg_spz2);
             Controls.Remove(spitze);
             
            Controls.Add(v2x_koo);
            Controls.Add(v2y_koo);
            Controls.Add(ergebnis);
            Controls.Add(ergebn_y);
            Controls.Add(ergebns);
            Controls.Add(v2x);
            Controls.Add(v2y);
            Controls.Add(erg_x);
             Controls.Add(erg_y);
         }
         private void spitzeberechnenMenu_Click(object sender, EventArgs e){
             p = new Label();
             p2 = new Label();
             v11 = new Label();
             v12 = new Label();
             px = new TextBox();
             py = new TextBox();
             v11_koo = new TextBox();
             v12_koo = new TextBox();
             erg_spz1 = new TextBox();
             erg_spz2 = new TextBox();
             spitze = new Button();
             
             p.Name = "P";
             p.Text = "Punkt P (             |              )";
             p.Location = new Point(10,10);
             p.Size = new Size(350,20);
             p2.Name = "P2";
             p2.Text = "Punkt P'(             |              )";
             p2.Location = new Point(200,10);
             p2.Size = new Size(200,20);
             
             px.Name = "Px";
             px.Text = "";
             px.Location = new Point(65,8);
             px.Size = new Size(35,20);
             py.Name = "Py";
             py.Text = "";
             py.Location = new Point(110,8);
             py.Size = new Size(35,20);
             
             v11.Name = "V";
             v11.Text = "Vektor 1 (x)";
             v11.Location = new Point(10,40);
             v11.Size = new Size(100, 20);
             v12.Name = "V";
             v12.Text = "Vektor 1 (y)";
             v12.Location = new Point(10,70);
             v12.Size = new Size(100, 20);
             
             v11_koo.Name = "V11";
             v11_koo.Text = "";
             v11_koo.Location = new Point(90,38);
             v11_koo.Size = new Size(55,20);
             v12_koo.Name = "V12";
             v12_koo.Text = "";
             v12_koo.Location = new Point(90,68);
             v12_koo.Size = new Size(55, 20);
             
             erg_spz1.Name = "erg";
             erg_spz1.Text = "";
             erg_spz1.Location = new Point(255,8);
             erg_spz1.Size = new Size(35,20);
             erg_spz1.Enabled = false;
             erg_spz2.Name = "erg";
             erg_spz2.Text = "";
             erg_spz2.Location = new Point(300,8);
             erg_spz2.Size = new Size(35,20);
             erg_spz2.Enabled = false;
             
             spitze.Name = "Berechnen";
             spitze.Text = "B&erechnen";
             spitze.Location = new Point(200,38);
             spitze.Size = new Size(100,20);
             spitze.Click += new EventHandler(spitze_berechnen);
             
             Controls.Remove(v2x_koo);
             Controls.Remove(v2y_koo);
            Controls.Remove(ergebnis);
            Controls.Remove(ergebn_y);
            Controls.Remove(ergebns);
            Controls.Remove(v2x);
            Controls.Remove(v2y);
            Controls.Remove(erg_x);
             Controls.Remove(erg_y);
             Controls.Remove(v1x_koo);
            Controls.Remove(v1y_koo);
            Controls.Remove(v1x);
            Controls.Remove(v1y);
            
            Controls.Add(erg_spz1);
            Controls.Add(erg_spz2);
             Controls.Add(p2);
             Controls.Add(px);
             Controls.Add(py);
             Controls.Add(v11_koo);
             Controls.Add(v12_koo);
             Controls.Add(p);
             Controls.Add(v11);
             Controls.Add(v12);
             Controls.Add(spitze);
         }
         private void ergebns_click(object sender, EventArgs e){
             try{
                 Console.Write("addire Vektoren ...\n");
                 string v1_x = v1x_koo.Text;string v1_y = v1y_koo.Text;
                 string v2_x = v2x_koo.Text;string v2_y = v2y_koo.Text;
                 decimal v1x = Convert.ToDecimal(v1_x);decimal v1y = Convert.ToDecimal(v1_y);
                 decimal v2x = Convert.ToDecimal(v2_x);decimal v2y = Convert.ToDecimal(v2_y);
                 decimal x = 0;decimal y = 0;
             
                 x = (v1x + v2x);
                 y = (v1y + v2y);
             
                 ergebnis.Text = x.ToString();
                 ergebn_y.Text = y.ToString();
             }catch (Exception ex){
                 MessageBox.Show(ex.Message);
             }
         }
         private void spitze_berechnen(object sender, EventArgs e){
             try{
                 Console.Write("Berechne Spitze ...");
                 decimal px = Convert.ToDecimal(px.Text), py = Convert.ToDecimal(py.Text);
                 decimal vx = Convert.ToDecimal(v11_koo.Text), vy = Convert.ToDecimal(v12_koo.Text);
                 decimal x2, y2;
                 x2 = vx + px;
                 y2 = vy + py;
                 
                 erg_spz1.Text = x2.ToString();
                 erg_spz2.Text = y2.ToString();
             }catch (Exception ex){
                 MessageBox.Show(ex.Message);
             }
         }
         private void help_click(object sender, EventArgs e){
             MessageBox.Show("© by Markus Büttner, Januar 2010");
         }
    }
}
 
Code:
decimal px = Convert.ToDecimal(px.Text), py = Convert.ToDecimal(py.Text);

Überlege dir mal, was du dort tust, denn da steckt der Fehler.

Tipp: Welche Variable legst du an und auf welche greifst du für das Initialisieren eines Wertes zu?
 
Das Problem wird sein, dass du in der Funktion spitzeberechnen
Code:
decimal px = ...
hast. Der Hinweis weiter oben ist schon korrekt gewesen, dass du da Probleme mit dem px bekommst, da in der Funktion erst die lokale Variable genommen wird.
Entweder du schreibst sowas wie
Code:
decimal px = Convert.ToDecimal([B]this.[/B]px.Text)...
oder besser noch benennst du dieses decimal px um.
 

Du auch :rolleyes:

Du deklarierst px doppelt. Einmal global (private TextBox px, py) und einmal in der Methode spitze_berechnen (decimal px = Convert.ToDecimal(px.Text), py = Convert.ToDecimal(py.Text)). Daran kann doch was nicht stimmen. Am einfachsten ist die änderst den Variablennamen von px in der Methode.

Alle Angaben ohne Gewähr. Ich habe von C# nicht viel Ahnung.

EDIT: Ok, such dir eine der Erklärungen aus :rolleyes:
 
Zuletzt bearbeitet:
[C#] 'decimal' does not contain a definition for 'Text'

Hallo,

diese Fehlermeldung meldet er mir, wenn ich mein Programm Compillieren will.
Code:
         private void mittelpunkt(object sender, EventArgs e){
             try{
                 decimal p_x = Convert.ToDecimal(px.Text);decimal p_y = Convert.ToDecimal(py.Text);//Diese Zeile schluckt er
                 decimal p2x = Convert.ToDecimal(p2x.Text);decimal p2y = Convert.ToDecimal(p2y.Text);//Hier kommt die Fehlermeldung
                 decimal m_x, m_y;
                 
                 m_x = (p_x + p2x)/2;
                 m_y = (p_y + p2y)/2;
                 
                 m.Text = "M( " + m_x.ToString() + " | " + m_y.ToString() + " )";
             }catch (Exception ex){
                 MessageBox.Show(ex.Message);
             }
         }
Ich habe schon beide Zeilen verglichen, aber sie sind absolut, die Variablen ausgenommen, Identisch.
 
Sorry, aber liest du auch die Antworten? Es scheint eher nicht so.
Wo sind die beiden Zeilen denn bitte gleich, außer dass da, ähnliches steht?

ähnlich != gleich

In der ersten Zeile heißt deine Decimal p_x und dein Textfeld px.
In der zweiten Zeile heißen aber sowohl dein Decimal als auch dein Textfeld p2x.

Dein Compiler kann zwar viel, aber nicht deine Gedanken lesen. Der weiß nicht, wann du in der Zeile welchen Typ meinen könntest, der geht von dem lokalen Typ aus, und der ist nunmal Decimal (hast du ja immerhin selber so bestimmt). Und Decimal kennt nunmal .Text nicht.

Das haben dir bereits die letzten 3 Antworten in unterschiedlicher Weise gesagt und dir sogar mögliche Lösungen genannt. Es sollte also nicht so schwierig sein, diese dann auch noch zu probieren anstatt die Lösung komplett zu ignorieren. Dann verlieren wir hier nämlich irgendwann auch die Lust, dir zu helfen.
 
Zurück
Oben