Autor Beitrag
Adabei
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Fr 03.10.14 21:29 
hallo nochmals

ich habe grad folgendes probelm bei der programmierung eines programmes, zur veranschulichung muss ich euch kurz mein Programm erklären.

Also ich habe 3 Klassen erstellt, Form1, Dateneingabe1 und Dateneingabe2
Wenn man bei der Form1 auf Daten eingeben klickt so erscheint das Fenster von Dateneingabe1, dort gibt der Benutzer seine Daten ein. Dann klickt der benutzer auf weitere Daten eingeben, dann kommt Dateneingabe2, wo er dann weitere Daten eingibt. Diese eingegeben Daten speichere ich immer in Variablen(wo sonst :D ), .Wenn der Benutzer dateneingabe2 feritg eingegeben hat klickt er den Button alle Daten eingegeben. diese daten will ich dann zur form 1 schicken. Diese Daten gebe ich dann in einer textbox aus, wo oben steht gesammelte Daten.

Jetzt zum derzeit programmierten:

also ich habe in der Form 1 so programmiert, dass Dateneingabe 1 öffnet bei dem button_Click Daten eingeben. Dort gibt er dann die Daten ein und die speichere ich in einer Variable, die ich im get teil dann gleich wieder zurückschicke. In der Dateneingabe 1 habe ich es so programmiert, dass wenn der Bentzer auf weitere Daten klickt das neue Fenster geöffnet wird. Dort gibt er dann seine Daten ein und die speichere ich auch in Variablen halt in der Dateneigabe 2. Von dort aus schicke ich die Daten zurück zu Dateneingabe1, wo sie empfangen werden sollten und dann weitergeschcikt werden zur Form1.

Das problem ist jetzt aber, dass wenn ich es in Form 1 ausgebe immer wieder diese Fehlermeldung kommt: System.Windows.Forms.TextBox, Text:
und die daten die in dateneingabe2 eingegebn wurden(sind zahlen) werden in der textbox immer als 0 dargestellt, obwohl sie sicher nicht den wert 0 haben, denn wenn ich 3 eingebe ist es ja nicht 0.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
 
Dateneingabe1 d1=new Dateneingabe1();
if (d1.ShowDialog() == DialogResult.OK)
            {
                d1.Daten= daten;
                d1.Zahl= zahl;
            }


die variablen zahl und daten definiere ich global, und als warnung kommt immer, dass diesen beiden werten nichts zugewiesen wird und immer den standardwert 0 haben.

und auch in der Klasse Dateneingabe1 ist einmal die Warnung, dass die zahl der ich von Dateneingabe2 zurückschicke nie etwas zugewiesen wird un immer den standartwerrt 0 hat.

relevatenr Code zu Form1 steht eh oben, wenn sonst noch was gebraucht wird bitte einfach melden
relevanter Code zu Dateneingabe1:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
 private void button1_Click(object sender, EventArgs e)
        {
            daten=m_tbeingabe.Text;
            Dateneingabe2 d2=new Dateneingabe2();
            if (d2.ShowDialog() == DialogResult.OK)
            {
                d2.Zahl= zahl;
            }
        }

die variable zahl habe ich als globale int-variable definiert,da ich sie ja auch in anderen methoden brauche in der klasse

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
public int Zahl
        {
            get
            {
                return zahl;
            }
            set
            {

            }
        }

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
 public string Daten
        {
            get
            {
                return daten;
            }
            set
            {

            }
        }

und bei der Dateneingabe2 Form schauts so aus:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
public int Zahl
        {
            get
            {
                zahl= Convert.ToInt32(textBox1.Text);
                return zahl;
            }
            set
            {
            }
        }


ich hoffe ihr erkennt das problem, denn bei der Forensuche und bei google suche bin ich auf kein ähnliches problem gestoßen
lg
C#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: Fr 03.10.14 21:41 
Du hast die Zuweisungen vertauscht.
Mach aus
ausblenden C#-Quelltext
1:
2:
d1.Daten= daten;
d1.Zahl= zahl;

ausblenden C#-Quelltext
1:
2:
daten = d1.Daten;
zahl = d1.Zahl;

...
Dann sollte es gehen.

Und zum Thema Properties:
Aus
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
public int Zahl
        {
            get
            {
                return zahl;
            }
            set
            {

            }
        }

kannst du auch
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
public int Zahl
        {
            get
            {
                return zahl;
            }
        }

schreiben, oder
ausblenden C#-Quelltext
1:
public int Zahl { get; private set; }					

Bei letzterer Methode kannst du die Variable Zahl nur innerhalb ihrer Klasse ändern. Dann brauchst du die lokale Variable zahl nicht.

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Sa 04.10.14 00:04 
Ergänzend dazu:

Schau dir mal an, wie man richtig mit Visual Studio debuggen kann.
Hier findest du einen guten Artikel dazu.

Damit kannst du sehr einfach deine Daten beobachten und schaust, wann sie sich ändern sollten, es aber nicht tun.
Dann fallen dir derartige Fehler ganz schnell selber auf ^^


Was den Stil angeht:
Benutze bitte sprechende Nahmen ;)
Niemand (inklusive du) kann später anhand deiner Klassen-Namen sagen, was die Klasse tun soll.
Die richtige Benennung (und auch eine Reihe anderer Konventionen) tragen dazu bei, dass man auch nach einer längeren Pause, sich in dem Code zurecht findet.
Ich wette mit dir, das kennt jeder Programmierer von seinen eigenen Projekten: Liegen erst einmal ein paar Wochen, Monate oder gar Jahre zurück, dann wird es zunehmend schwerer, den eigenen Code zu verstehen.


Zuletzt bearbeitet von Palladin007 am Sa 04.10.14 18:15, insgesamt 3-mal bearbeitet
Adabei Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Sa 04.10.14 17:49 
ok, danke, ja dass war der fehler, ok, ich werde dann die kurzform verwenden, da die ja viel leichter zu verwenden ist;

ja dass mit dem debuggen schaue ich mir schnellstmöglich an, weil anscheinend kommt man dann selber und schneller auf fehler drauf
mit den entsprechenden namen habe ich meine probleme, da ich ja erst ein anfänger bin und auch nicht so viel zeit habe, c# zu programmieren, aber ich versuche es zu verbessern.
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Sa 04.10.14 18:07 
Dass eine gute Benennung problematisch ist, weil du Anfänger bist und wenig Zeit hast, halte ich für eine Ausrede :D
Das Überlegen, wie etwas sinnvoll heißen soll, macht kaum zeitlichen Unterschied aus und auch Anfänger wissen, was sie sich dabei denken, wenn sie etwas programmieren, oder? ^^
Ich gebe zu, die perfekte Benennung gibt es nicht, das ist genauso eine Kunst wie der ganze Rest auch, aber ich finde, MainForm/MainWindow ist eine deutlich leichter verständliche Bezeichnung für ein Hauptfenster, oder?

Wie auch immer, war nur ein Tipp ;)