Autor Beitrag
Sweetiieh
ontopic starofftopic starofftopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 50



BeitragVerfasst: Mi 24.10.12 17:05 
Hallo,

ich bin dabei OOP in der Schule zu lernen, nun komme ich aber nicht mehr weiter...
Man kann über eine ComboBox 3 Namen auswählen, die alle besitzen ein alter & eine Größe.
Nun möchte ich haben, das wenn man den namen ausgewählt hat, in label1 die Größe & und in label2 das alter ausgegeben wird.
Klappt aber nicht.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
        public Form1()
        {
            InitializeComponent();
            label1.Text = Convert.ToString(größe);
            label2.Text = Convert.ToString(alter);
        }


ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
        private void Emi()
        {
            Pferde Emi = new Pferde();
            Emi.größe = Convert.ToString(140);
            Emi.alter = Convert.ToString(15);
        }


ausblenden C#-Quelltext
1:
2:
3:
4:
        private void button1_Click(object sender, EventArgs e)
        {
            if (comboBox1.Text == "Emi") { Emi(); }
        }


Kla, ich könnte einfach in der Methode Emi schreiben: label1.Text = Convert.ToString(Emi.größe); aber ich möchte es nicht so gelöst haben.
Kann mir da einer helfen?!

Dankeschön, schonmal im vorraus :)
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4807
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 24.10.12 17:21 
Hallo Jenny,

du hast zwar geschrieben, was du nicht haben willst, aber nicht genau, was du machen möchtest.
Ich gebe dir mal einfach ein paar Tipps:
- deine Methode Emi sollte das Pferde-Objekt mittels return ... zurückgeben (P.S: Die Einzahl Pferd wäre für den Klassennamen wohl besser)
- nun kannst du innerhalb der GUI-Methode auf das zurückgegeben Objekt zugreifen und es ausgeben:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
if (comboBox1.Text == "Emi")
{
  Pferde emi = Emi(); // bzw. Pferd ;-)
  label1.Text = Convert.ToString(emi.größe);
  label2.Text = Convert.ToString(emi.alter);
}

Außerdem wäre es besser, dein Pferd(e)-Klasse hätte nicht nur string-Werte, sondern für Größe und Alter bietet sich ja int (also eine Ganzzahl) an.
Und auch die Label sollte du besser benennen (z.B. labelGroesse, labelAlter).
Sweetiieh Threadstarter
ontopic starofftopic starofftopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 50



BeitragVerfasst: Mi 24.10.12 17:34 
Okay, gut danke für die Info :)

Hier: Ich möchte einfach die Eigenschaft in den Label ausgeben lassen, ohne das ich es immer aufschreiben muss. Also ich möchte in der Combobox ein Name auswählen & sofort soll in label1 das alter ausgegeben werden & wenn man den namen ändert soll sich das alter auch ändern im label.

Ich könnte zwar jedesmal schreiben:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
        private void Emi()
        {
            Pferde Emi = new Pferde();
            Emi.größe = Convert.ToString(140);
            Emi.alter = Convert.ToString(15);

            label1.Text = Convert.ToString(Emi.größe);
            label2.Text = Convert.ToString(Emi.alter);
        }


aber ich möchte nicht in jede methode das aufschreiben label1.Text = Emi.größe. Sondern ich will schreiben Das in label1 immer die Größe erscheinen soll...
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 24.10.12 17:39 
So wäre auch die Pferde Klasse völlig überflüssig. Ist es Teil eurer Aufgabe die Pferde Klasse sinnvoll einzusetzen?
Sweetiieh Threadstarter
ontopic starofftopic starofftopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 50



BeitragVerfasst: Mi 24.10.12 17:48 
Wir haben keine Aufgabe, ich habe es mir selbst zur Aufgabe gemacht, mein Lehrer gibt sich schon mit der Lösung zufrieden, ich aber nicht!

Ich meine es müsste noch besser gehen .. nur wie ist die frage und keiner kann mir helfen :/
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 24.10.12 18:04 
Zitat:
Ich meine es müsste noch besser gehen .. nur wie ist die frage und keiner kann mir helfen :/


Besser geht immer ;) Ich checke nur wieweit wir dir helfen können oder sollten ohne dir das Denken abzunehmen bzw. dich zu überfordern je nachdem wie weit du in deinem Lernprozess bist.

Ein Weg das schöner zu gestalten wäre

a.) Schreibe dir eine Pferd Klasse mit den 3 Eigenschaften Name, Größe, Alter mit den passenden Datentypen.
b.) Erstelle davon 3 Instanzen mit den entsprechenden Daten für deine 3 Beispielpferde.
c.) Packe diese 3 Instanzen in eine Liste. Ein Array oder besser noch eine List<Pferd>.
d.) Binde diese Liste an die Combobox (Siehe dir dazu die DataSource und die Displaymember Properties an)
e.) In deiner Button_Click Methode kannst du dann das aktuell ausgewählte Pferd abfragen (SelectedItem Property der ComboBox). Du erhälst dann nicht nur den Namen sondern eine Pferd Instanz mit allen Daten die du dann einfach dem Label zuweisen kannst. Die Zuweisung gäbe es also nur 1 mal und nicht drei mal je Pferd mit zwischenzeitlicher Erzeugung einer neuen Pferd Instanz.

Wenn du das gemacht und verstanden hast könnte man den nächsten Schritt wagen und zur weiteren Verschönerung auch die Zuweisung der Werte an die Labels per Databinding zu machen dann würde Schritt e.) wegfallen. Zum Verständnis was da passiert wäre es aber für dich vermutlich zu früh das direkt anzugehen.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4807
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 24.10.12 19:06 
Und zu
Sweetiieh hat folgendes geschrieben:
Also ich möchte in der Combobox ein Name auswählen & sofort soll in label1 das alter ausgegeben werden.

Dazu kannst du das SelectedIndexChanged-Ereignis der ComboBox benutzen (anstatt des explizit zu betätigenden Button-Click Ereignisses).