Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

von Klasse auf das Objekt einer anderen Klasse zugreifen

Empfohlene Antworten

Main erzeugt irgendwo den "Schrank" und merkt sich welcher Schrank das war.

Main malt den Schrank an (bzw. Schrank lässt sich anmalen).

Main schaut nach, welche Farbe der Schrank hat (genau der, den sie oben erzeugt hat).

Ich versteh bloß nicht, warum du in main die Ausgabe haben willst.

Läuft nicht alles in der Fensterklasse?

Ich habe mehrere Forms und Klassen. So auch die Form Main & Grundrechenarten und die dazugehörigen Klassen. In der Form Grundrechenarten werden Berechnung durchgeführt und schließlich in den fertigen String "ausgabe" abgelegt. Nun soll dieser String in der richTextBox von Form Main angezeigt werden.

na dann ist das doch klar...

Nachdem du das Fenster in der Main erzeugt und angezeigt hast, bzw. nachdem das Fenster die Berechnung durchgeführt hat, rufst du einfach von der Instanz (das Fenster) die Funktion Get_ausgabe() auf und kommst so auf den String.

Nun soll dieser String in der richTextBox von Form Main angezeigt werden.

Ja, das wissen wir alles schon, und das hilft uns nicht weiter.

Ich bitte dich hiermit zum dritten Mal, zu zeigen, wo und wie du die Instanz der Klasse Grundrechenarten anlegst, und wo und wie du Aktion aufrufst.

Es kommt nicht darauf an, wie die Klasse aufgebaut ist, sondern was du damit machst. In Worten des Beispiels: Es kommt nicht darauf an, wie der Schrank aufgebaut ist, und welche chemischen Vorgänge beim Anmalen ablaufen. Es kommt darauf an, wie du dir merkst, wo du den Schrank hingestellt hast.

Ich bitte dich hiermit zum dritten Mal, zu zeigen, wo und wie du die Instanz der Klasse Grundrechenarten anlegst, und wo und wie du Aktion aufrufst.

Ich denke doch, dass es ersichtlich ist, wo und wie die Methode "Aktion" im Beitrag #21 aufgerufen wird.

Die Instanz zur Klasse Grundrechenarten wird in der Klasse Main (Form) angelegt:


Grundrechenarten FormGrundrechenarten = new Grundrechenarten();

string test = FormGrundrechenarten.Get_ausgabe();

TextBox_Rechenverlauf.AppendText(test + "\r\n");

Ich denke doch, dass es ersichtlich ist, wo und wie die Methode "Aktion" im Beitrag #21 aufgerufen wird.
Nein, das ist nicht ersichtlich. Wo erstellst du diese Instanz? Wo steht in deinem Code noch new Grundrechenarten()?

Die Instanz zur Klasse Grundrechenarten wird in der Klasse Main (Form) angelegt:
Das ist aber nicht dieselbe Instanz, über die Aktion aufgerufen wird, sondern eine, die du dort neu erstellst. Der Schrank ist neu, der wurde nie angemalt.

Ich glaube langsam riech ich ein Designproblem...

Main wird nicht benachrichtigt, wenn eine Berechnung durchgeführt wurde?

Anmerkung: Wenn du mit dem Ergebnis später weiterarbeiten willst, dann braucht das auch noch ne Property...

Nachtrag: Wenn das wirklich das einzige Objekt dieser Klasse ist, das angelegt wird, dann ist klar, warum das nicht klappt. Du rufst sofort nach dem Erstellen Get_ausgabe auf, die Berechnung wird aber erst ausgeführt, wenn der Button angeklickt wird.

Das muss schon in der richtigen Reihenfolge passieren. Du kannst nicht erst die Farbe des Schrankes rausfinden, und dann anmalen.

Main wird nicht benachrichtigt, wenn eine Berechnung durchgeführt wurde?

Genau... das Form Grundrechenarten macht alles unabhängig von Main! Alles wird dort berechnet und in einem String "ausgabe" zusammengefasst.

Gut, Properties.... bspw. so in die Klasse Grundrechenarten eintragen?


public string TextToShow

{

    get { return this.ausgabe; }

    set { this.ausgabe = value; }

}

Und dann in der Main:

Grundrechenarten FormGrundrechenarten = new Grundrechenarten();

TextBox_Rechenverlauf.AppendText(FormGrundrechenarten.TextToShow + "\r\n");

Geht aber auch noch nicht :rolleyes:

Genau... das Form Grundrechenarten macht alles unabhängig von Main! Alles wird dort berechnet und in einem String "ausgabe" zusammengefasst.

[...]

Und dann in der Main:


Grundrechenarten FormGrundrechenarten = new Grundrechenarten();

TextBox_Rechenverlauf.AppendText(FormGrundrechenarten.TextToShow + "\r\n");

Ok, dann doch Designproblem. Du rufst erst dein Fenster auf, das wird angezeigt und im gleichen Moment liest du die ausgabe aus (die zu dem Zeitpunkt noch leer ist). Gibt jetzt verschiedene Mittel und wege das zu lösen... entweder du wirfst immer ein ereignis, welches die Main-Klasse benachrichtigt, dass sich die Property geändert hat (was allerdings mit Ereignishandlern ein Nachteil wäre, wenn du immer neue Fenster erzeugst.) oder du machst einen modalen Dialog, der zu erst abgearbeitet werden muss und sobald dieser geschlossen wird, liest du die Ausgabe der Instanz des Fensters aus und trägst sie ein (du wartest sozusagen, bis die Berechnung durchgeführt wurde, dann ist aber nur eine Berechnung pro Fenster möglich).
Gut, Properties.... bspw. so in die Klasse Grundrechenarten eintragen?

public string TextToShow

{

    get { return this.ausgabe; }

    set { this.ausgabe = value; }

}

Meinte ich eigentlich nicht. Aber verschieben wir das Problem mal auf später.

Ich verlange wahrscheinlich viel zu viel..... aber gibt es denn nicht eine einfache Möglichkeit eine Variable permanet zu speichern - "fest halten" - , dass sie ihren Wert nicht verlieren (nur bei Neubelegung), so dass sie überall verfügbar ist?

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.