C# Source Taschenrechner+Klassefrage+Bild

lxlox

Cadet 4th Year
Registriert
Nov. 2013
Beiträge
74
Hallo, folgende Integerwerte möchte ich in einer Klasse haben:

Code:
            int zahl1=0;
            int zahl2=0;
            int ergebnis;

Diese Werte sollen nicht in Form1.cs stehen, jedoch verfügbar sein.
Ich hoffe Ihr könnt mir weiterhelfen.

Taschenrechnerbild.jpg

Form1.cs :

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

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

        private void richTextBox1_TextChanged(object sender, EventArgs e)
        {
        }

        private void button1_Click(object sender, EventArgs e)
        {

            int zahl1=0;
            int zahl2=0;
            int ergebnis;

            try
            {
                zahl1 = Convert.ToInt16(richTextBox1.Text);
                zahl2 = Convert.ToInt16(richTextBox2.Text);

                ergebnis = zahl1 + zahl2;

                label1.Text = ergebnis.ToString();
            }
            catch { }

        }

        private void button2_Click(object sender, EventArgs e)
        {
            int zahl1 = 0;
            int zahl2 = 0;
            int ergebnis;


            try
            {

                zahl1 = Convert.ToInt16(richTextBox1.Text);
                zahl2 = Convert.ToInt16(richTextBox2.Text);

                ergebnis = zahl2 - zahl1;

                label1.Text = ergebnis.ToString();
            }
            catch { }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            richTextBox1.Text = "";
            richTextBox2.Text = "";
        }
    }
}



testklasse.cs :

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WindowsFormsApplication1
{
    class testklasse
    {






    }

}
 
Hi,

bitte erkläre mal dein Problem genauer - so sehe ich gerade irgendwie keines.

VG,
Mad
 
Wieso beschränkst du dich denn auf Ganzzahlige operationen? Bei einem Taschenrechner würde es doch Sinn machen auf Float zu setzen
 
Du hast recht, das float auch möglich ist. Dies ist jedoch nur ein Beispiel. Ich wünsche mir etwas über das visual c# kapitel klassen zu erlernen, weil ich das noch nicht so gut verstehe. Dieses Beispiel ist soweit Ausführbar. Gerne erleutere ich das Thema deutlicher.

In "testklasse.cs " soll folgendes stehen:

Code:
 int zahl1=0;
    int zahl2=0;
    int ergebnis;

In "Form1.cs" soll das jedoch nicht stehen. Von Form1.cs soll jedoch auf "testklasse.cs "zugegriffen werden.
 
Du solltest dich mit den Prinzipien MVC (Model View Controller)oder MVVM (ModelView ViewModel) auseinandersetzen. Quasi Code nach seinen Aufgaben geordnet an- und ablegen. Das lese ich für mich aus deinen Anforderungen heraus, da du ja den Code der Logik nicht im Code der Forms haben willst.

EDIT: Wenn du gerade dabei bist C# zu lernen und keinen (baldigen) Abgabetermin einhalten musst, empfehle ich dir WinForms nicht mehr zu benutzen sondern zu WPF zu wechseln. Am Anfang gibt es da sicherlich eine steile Lernkurve, aber es lohnt sich. Außerdem gibt es gute Tutorials im Internet.
 
Zuletzt bearbeitet:
Wie mir scheint, fehlt dir das relativ viel Wissen über die objektorientierte Programmierung. Dort solltest du dich auf jeden Fall weiter einlesen.

Im Groben besteht ein Objekt aus Methoden, Variablen und Eigenschaften.
Methoden definieren Vorgänge, die ein Objekt ausführen kann. Eigenschaften bzw. Variablen stellen Werte des Objektes da, auf die du zugreifen kannst.

Eine Eigenschaft(Property) besteht so gesehen aus 2 Methoden, die eine Variable des Objektes ausgeben bzw. setzen. Um Daten für andere Objekte nach Außen verfügbar zumachen, sollte man immer Eigenschaften benutzen.

In deinem Fall würde die Klasse "Testklasse" wiefolgt aussehen :

Code:
class TestKlasse
    {
		private int _Zahl1 // Eine Instanzvariable. Der Bezeichner "private" zeigt an, dass diese Variable nur vom Objekt selbst behandelt werden kann. Möglich wäre u.A. auch "public" um die Variable für andere Objekte sichtbar zu machen.
		public int Zahl1 // Eine Eigenschaft(Property). Der Bezeichner "public" zeigt an, dass diese Variable auch von anderen Objekten behandelt werden kann. Eine Instanz der TestKlasse-Klasse ist notwendig.
		{
			get{return this._Zahl1; }; // Getter-Methode der Eigenschaft. Gibt den Wert der Variable _Zahl1 wieder.
			set{this._Zahl1 = value; }; // Setter-Methode der Eigenschaft. Setzt den Wert der Variable _Zahl1 auf den neuen Wert.
		}
		// Prinzipiell könnstest du im Getter bzw. Setter weitere Funktionen hinzufügen. Datenvalidierung zum Beispiel - Das ginge mit einer Instanzvariable nicht.
		
		
		private int _Zahl2
		public int Zahl2
		{
			get{return this._Zahl2; };
			set{this._Zahl2 = value; };
		}
		
		private int _Ergebnis
		public int Ergebnis
		{
			get{return this._Ergebnis; };
			set{this._Ergebnis = value; };
		}
    }

Aufrufen kannst du das Ganze so :

Code:
TestKlasse tk = new TestKlasse(); // Du benötigst zunächst eine neue Instanz deiner TestKlasse-Klasse.
tk.Zahl1 = Convert.ToInt16(this.richTextBox1.Text); // Setzender Eigenschaftenzugriff
tk.Zahl2 = Convert.ToInt16(this.richTextBox2.Text); // Setzender Eigenschaftenzugriff
tk.Ergebnis = tk.Zahl1 + tk.zahl2 // Setzender Eigenschaftenzugriff
label1.Text = tk.Ergebnis; // Lesender Eigenschaftenzugriff


Ups, Fehler korrigiert. Danke Marguth ;)
 
Zuletzt bearbeitet:
@ Raknar ich werde mich über WPF informieren
@ SomeDifferent dein Code funktioniert nicht und ist unvollständig

Kann mir jemand weiterhefen?
 
Zum Programmieren gehört auch, Fehlermeldungen zu lesen und zu verstehen. In 99% der Fälle ist dort die fehlerhafte Zeile angegeben und goolge kann dir helfen, diesen Fehler zu korrigieren.

Ansonsten gilt: "Funktioniert nicht" gibt's nicht. Schreibe was nicht funktioniert und poste die Fehlermeldung.
 
Der gennante Code würde für so für mich so mehr sinn ergeben. Es kommt jedoch noch zu den Error (siehe Bild).

22222222222.jpg


class1.cs:
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WindowsFormsApplication1
{
    class Class1
    {

        	public int Zahl1
{
get{return this.Zahl1; }
set{this.Zahl1 = value; }
            }


public int zahl2
{
get{return this.zahl2; }
set{this.zahl2 = value; }
}



public int Ergebnis
{
get{return this.Ergebnis; }
set{this.Ergebnis = value; }
}

    }
}



form1.cs:


Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

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

        private void button1_Click(object sender, EventArgs e)
        {
                Class1 tk = new Class1();
    tk.Zahl1 = Convert.ToInt16(this.richTextBox1.Text);
    tk.zahl2 = Convert.ToInt16(this.richTextBox2.Text); 
    tk.Ergebnis = tk.Zahl1 + tk.zahl2; 
    label1.Text = Convert.ToString(tk.Ergebnis); 
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Class1 tk = new Class1(); 
            tk.Zahl1 = Convert.ToInt16(this.richTextBox1.Text);
            tk.zahl2 = Convert.ToInt16(this.richTextBox2.Text); 
            tk.Ergebnis = tk.Zahl1 - tk.zahl2; 
            label1.Text = Convert.ToString(tk.Ergebnis); 
        }
    }
}
 
Die Privaten Felder sind nicht zum spass da!

Code:
private int _Zahl1;
public int Zahl1 
{
	get{return this._Zahl1; };
	set{this._Zahl1 = value; }; 
}
		
private int _Zahl2;
public int Zahl2
{
	get{return this._Zahl2; };
	set{this._Zahl2 = value; };
}

PS: Im beispielCode war ein Fehler: Bei get wird auf das Property zugegriffen statt auf die instanzvariable.
 
Zuletzt bearbeitet von einem Moderator:
Ist immernoch ein kleiner Fehler drinnen, dein getter der _Zahl1 liefert nicht das gewünschte ;)

Code:
public int Zahl1 
{
	get{return this._Zahl1; }
	set{this._Zahl1 = value; }
}
 
CommanderWayan schrieb:
Ist immernoch ein kleiner Fehler drinnen, dein getter der _Zahl1 liefert nicht das gewünschte ;)

Code:
public int Zahl1 
{
	get{return this._Zahl1; }
	set{this._Zahl1 = value; }
}

Hups :o
der Fehlerteufel ist stark in diesem Code :evillol:
 
Zurück
Oben