C# Textbox aus anderer Klasse füllen

PaterBrown

Grünschnabel
Hallo zusammen,

ich starte gerade in die Welt der C# Programmierung und soll zum Einstieg einen Taschenrechner programmieren.

Mein Problem ist, dass ich aus einer anderen Klasse in die Textbox in der Form1 schreiben möchte, aber da im Moment absolut nicht weiter komme.

Ich hab schon den Großmeister google befragt, aber die ganzen Antworten haben mir nicht wirklich bei der Lösung geholfen.

Wie schaffe ich es also, das Ergebnis, das in einer anderen Klasse berechnet wird, in die Textbox zu schreiben?

Sollte noch irgendetwas unklar sein oder sollte doch Code benötigt werden reiche ich den natürlich nach.

Danke schonmal im Vorraus,

PaterBrown
 
Du könntest entweder dein Editfeld an die Klasse in der du was hineinschreiben willst übergeben, oder was ich persönlich einfacher und sauberer finde du könntest ein Objekt deiner Klasse für die Berechnung in deiner Form.cs anlegen und dein Ergebnis dann direkt auslesen und in das Editfeld schreiben.
 
Der gesamte Code umfasst ca 1200 Zeilen, deswegen schreib ich mal die meines Erachtens interessanten Dinge hier rein.
Nachdem der "ButtonGleich" gedrückt wurde springt das Programm in den Parser, der dann das Ergebnis der eingegebenen Rechnung berechnet und dann soll in einer Klasse "Ausgabe" das berechnete Ergebnis wieder an die Form1 zurück gegeben werden oder aber die textBox1 direkt aus der Ausgabeklasse gefüllt werden.

Code:
namespace Taschenrechner
{
    public partial class Form1 : Form 
    {
public Form1()
        {            
            InitializeComponent();
        }

        public void textBox1_TextChanged(object sender, EventArgs e)
        {
            
        }

private void buttonEins_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "1";
            strInput = strInput + "1";
        }

        private void buttonZwei_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "2";
            strInput = strInput + "2";
        }

        private void buttonDrei_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "3";
            strInput = strInput + "3";
        }

        private void buttonVier_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "4";
            strInput = strInput + "4";
        }

        private void buttonFuenf_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "5";
            strInput = strInput + "5";
        }

        private void buttonSechs_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "6";
            strInput = strInput + "6";
        }

        private void buttonSieben_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "7";
            strInput = strInput + "7";
        }

        private void buttonAcht_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "8";
            strInput = strInput + "8";
        }

        private void buttonNeun_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "9";
            strInput = strInput + "9";
        }

        private void buttonNull_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "0";
            strInput = strInput + "0";
        }

        private void buttonRezi_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "reziprok ";
            strInput = strInput + "$";
        }

        private void buttonMal_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "*";
            strInput = strInput + "*";
        }

        private void buttonMinus_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "-";
            strInput = strInput + "-";
        }             

        private void buttonProzent_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "%";
            strInput = strInput + "%";
        }

        private void buttonGeteilt_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "/";
            strInput = strInput + "/";
        }

        private void buttonPlus_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "+";
            strInput = strInput + "+";
        }

        private void buttonGleich_Click(object sender, EventArgs e)
        {
            strInput = textBox1.Text;
            Parser parser = new Parser(strInput);
        }

        private void buttonWurzel_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text + "?";
            strInput = strInput + "?";
        }

        public void textBoxFill(string wert)
        {
            this.textBox1.Text = wert;
        }

        private void textBox1_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                strInput = textBox1.Text;
                Parser parser = new Parser(strInput);
            }
        }
 
Hallo,

Was macht denn die Klasse Ausgabe so?

Wenn die Parser Klasse alles berechnet,
dann steht ja das Ergebnis in dieser Klasse zur Verfügung.

Dann könntest du sowas wie hier machen:
Ein kleine Funktion in Parser (GetResult() ? ) die dir das Ergebnis rausgibt und dann rein damit in die TextBox.
C#:
...
Parser parser = new Parser(strInput);
this.ErgebnisTextbox.Text = parser.GetResult().ToString();
 
und dann soll in einer Klasse "Ausgabe" das berechnete Ergebnis wieder an die Form1 zurück gegeben werden
Eine extra Klasse die nur eine einzige Funktion hat? Hört sich irgendwie nicht sonderlich Sinnvoll an.

Parser parser = new Parser(strInput);
Machst du alle Berechnung in der Parser Klasse im Konstruktor oder rufst du aus dem Konstruktor private Methoden auf?
Das wäre ehrlich gesagt beides nicht sonderlich elegant alleine schon weil du dir dann selbst die Möglichkeit nimmst einfach den berechneten Wert zu returnen.
Ich würde sogar behaupten das es bei der Parser Klasse wesentlich besser wäre sie als static zu deklarieren.

Noch ein Tip.
Wenn du dich selbst dabei erwischst dass du x-Mal den selben Code schreibst ( wie hier diese ganzen Eventhandler ) solltest du dich fragen ob das nicht auch kürzer geht.
Im Prinzip hätte es ein einziger Eventhandler auch getan. ( Der = Button ist davon logischerwese ausgenommen).
 
Meine Klasse Ausgabe macht bisher noch gar nichts.
Grundgedanke meines Ausbilders ist es, dass ich einen Einstieg in die Objektorientierte Programmierung bekomme. Deswegen soll ich im Prinzip für alles eine eigene Klasse schreiben (Addition, Subtraktion, Geteilt etc.). Und deswegen auch eine eigene Klasse Ausgabe, die nur noch den fertigen Ergebnisstring übergeben bekommt und diesen dann in die textBox schreibt.
Leider bin ich was das Programmieren angeht noch ein ziemlicher Anfänger;)
 
Vielleicht zum besser Verständnis hier noch die Parser Klasse

Code:
public Parser(string strInput)
        {
            //Eingabestring auf $,%,& Operatoren untersuchen um ggf zuerst deren Ergebnis zu berechnen.
            int count = 0;
            int zaehl = 0;
            while (count < strInput.Length)
            {
                if (strInput[count] == '?')
                {
                    Wurzel wurzel = new Wurzel(strInput);
                }
                else if (strInput[count] == '%')
                {
                    Prozent prozent = new Prozent(strInput);
                }
                else if (strInput[count] == '$')
                {
                    Reziprok rezi = new Reziprok(strInput);
                }
                count++;
            }


            double[] dblNumber = new double[strInput.Length];



            //String Split an den einzelnen Operatoren
            string[] strNumber = strInput.Split(new Char[] { '+', '-', '*', '/' });

            int j = 0;

            //Werte aus dem strNumber-Array in Double Werte umgewandelt werden
            for (int z = 0; z < strNumber.Length; z++)
            {
                if (Double.TryParse(strNumber[z], out dblNumber[z]))
                {
                    dblNumber[j] = Convert.ToDouble(strNumber[z]);
                    j++;
                }
            }

            List<char> chrOperator = new List<char>();


             j = 0;

            //Rechenzeichen werden direkt aus dem input gelesen. Falls ein Rechenzeichen vorhanden ist wird es iin der List für die Rechenzeichen gespeichert

            for (int i = 0; i < strInput.Length; i++)
            {
                if (strInput[i] == '+')
                {
                    chrOperator.Add(strInput[i]);
                }
                else if (strInput[i] == '-')
                {
                    chrOperator.Add(strInput[i]);
                }
                else if (strInput[i] == '*')
                {
                    chrOperator.Add(strInput[i]);
                }
                else if (strInput[i] == '/')
                {
                    chrOperator.Add(strInput[i]);
                }
            }

            //Bis hierhin wurden alle Zahlen in einem Array gespeichert, sowie alle Rechenzeichen in einem Array gespeichert

            zaehl = 0;

            //Prüfen, ob Punktrechnung vorhanden ist

            while (zaehl < chrOperator.Count())
            {
                //Prüfen, ob es Multiplikation
                if (chrOperator[zaehl] == '*')
                {
                    double wert1 = dblNumber[zaehl];
                    double wert2 = dblNumber[zaehl + 1];
                    PunktVorStrich pvs = new PunktVorStrich(wert1, wert2, strInput, chrOperator[zaehl], zaehl);
                }
                //...oder Division ist
                else if (chrOperator[zaehl] == '/')
                {
                    double wert1 = dblNumber[zaehl];
                    double wert2 = dblNumber[zaehl + 1];
                    PunktVorStrich pvs = new PunktVorStrich(wert1, wert2, strInput, chrOperator[zaehl], zaehl);
                }
                zaehl++;
            }

            if (chrOperator.Count() == 0)
            {
                Ausgabe ausgabe = new Ausgabe(strInput);
            }

            //Sollte keine Punkt vor Strichrechnung vorliegen, wird zum Ende hin in die Plus oder Minusmethode gegangen, da alle Sonderzeichen oder Sonderfälle, wie Wurzel oder 
            //Punkt v. Strich, bereits betrachtet und berechnet wurden, sodass nur noch die Addition und die Subtraktion übrig bleiben
            for (int z = 0; z < chrOperator.Count; z++)
            {
                Console.Write("Hier");

                if (chrOperator[z] == '+')
                {
                    Plus plus = new Plus(dblNumber[z], dblNumber[z + 1], strInput);
                }
                if (chrOperator[z] == '-')
                {
                    Minus minus = new Minus(dblNumber[z], dblNumber[z + 1], strInput);                    
                }
            }
        }
    }
 
Zurück