C#: Daten zwischen Window und View durchreichen

OP #7664827
Lesenswert?

Hallo,

für eine C# Anwendung möchte ich Daten von einem Window in ein View Fenster durchreichen. Wie kann dies in C# realisiert werden?

[Windows Form] Daten erzeugen und mit einem Button zum entsprechenden Vew Fenster übermitteln

[View Form] Daten von Windows Form erhalten und weiterverarbeiten

#7664840
Lesenswert?

Hallo,

was ist denn ein View Form? Soviel ich weiß, gibt es da keine Unterschiede zwischen Fenster und Fenster. Messages-Boxen gibt es auch noch.

Jedes Fenster ist eine Fensterinstanz, welche in deinem Program instaziirt sind. Wenn du Daten von einer Instanz in die andere schieben möchtest, musst du nur den Inhalt der einen Instanz nur in die andere kopieren. Du könntest die Inhalte natürlich noch in deinem Program zwischenspeichern und dann kopieren.

Mit Databinding könntest du es noch etwas vereinfachen, aber da kann es unübersichtlich werden.

#7664858
Lesenswert?

Zo R. schrieb:

für eine C# Anwendung möchte ich Daten von einem Window in ein View Fenster durchreichen. Wie kann dies in C# realisiert werden?

Databinding ist Dein Freund. Am Anfang ist es zwar gewöhnungsbedürftig, aber wenn man es einmal verstanden hat funktioniert das sehr gut. DEr ganze Kram die Daten in irgendwelchen Variablen zwischenspeichern zu müssen entfällt damit. Sehr angenehm ist auch das es in beide Richtungen funktioniert.

#7664956
Lesenswert?

Zo R. schrieb:

Ich brauche für den Anfang ein einfaches Beispiel, wo eine Textnachricht durchgereicht wird.

in der Hauptform ein event und delegate anlegen, die Klasse Eventargs beerben, nur mit einer Eigenschaft string "Message". Das Event löst du aus mit invoke new event und abonnierst im Zielform einen Eventhandler mit gleicher Signatur wie der delegate. Ganz einfach. Kann dir ChatGPT noch wesentlich eleganter erklären und auch gleich Snippets für copy&paste!

OP #7665277
Lesenswert?

Guten Morgen, ChatGPD habe ich auch benutzt. Allerdings generiert mir ChatGPD ein Beispiel, das bei mir nicht so funktioniert.

Ich habe einen View:

1
namespace Config.Views
2
{
3
    public partial class FunctionsTelegramView : UserControl
4
    {
5

6
    }    
7
}

Und eien Windows:

1
namespace Config.Windows
2
{
3
    public partial class DataSelectionWindow : Window
4
    {
5
    }
6
}

Das Problem bei mir ist das es unterschiedliche Classes sind: UserControl und Window

Beitrag #7665408 wurde von einem Moderator gelöscht.
OP #7665410
Lesenswert?

Im obigen Post wird das generierte Beispiel von ChatGPD geziegt.

1
protected virtual void OnMessageSent(string message)
2
        {
3
            if (MessageSent != null)
4
            {
5
                if (InvokeRequired)
6
                {
7
                    Invoke(new MessageEventHandler(OnMessageSent), new object[] { this, message });
8
                }
9
                else
10
                {
11
                    MessageSent(this, message);
12
                }
13
            }
14
        }

Wenn ich diesen Code hier bei mir platzire erscheint zum Beispiel diese Meldung:

Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand Fehler CS0123 Keine Überladung für "OnMessageSent" stimmt mit dem Delegaten "MessageEventHandler" überein.

#7665452
Lesenswert?

Zo R. schrieb:

Wenn ich diesen Code hier bei mir platzire erscheint zum Beispiel diese Meldung:

Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand Fehler CS0123 Keine Überladung für "OnMessageSent" stimmt mit dem Delegaten "MessageEventHandler" überein.

Tja Programmieren ist schon ein bissel mehr als nur Copy & Paste. Das muß man einfach lernen, damit man das dann auch versteht. Am besten geht das mit einem passenden Fachbuch oder auch einem guten Onlinetutorial, für was man sich entscheidet ist Geschmackssache - ich persönlich investiere da gern in Papier. Das muß halt entsprechend durcharbeiten und dann eigenständig mal ein kleines Beispiel programmieren und nicht einfach was kopieren was man eigentlich noch gar nicht verstanden hat. Ja das ist mühsam und der Weg ist steinig, aber am Ende hat man es verstanden und kann es problemlos in eigenen Projekten anwenden.

Die Fehlermeldung ist ziemlich eindeutig: Sender und Empfänger passen, einfach ausgedrückt, nicht zusammen. Warum, mußt Du schon selber heraus finden.

OP #7665456
Lesenswert?

Ok eine MessageEventHandler Klasse habe ich erstellt. Jetzt habe ich in der anderen Datei Fehlermeldungen:

1
MessageSent += Data_MessageSent;
2

3
private void Data_MessageSent(object sender, string message)
4
        {
5
            // Prüfe, ob Invoke erforderlich ist
6
            if (InvokeRequired)
7
            {
8
                // Verwende Invoke, um die Methode im UI-Thread aufzurufen
9
                Invoke(new Action<object, string>(Form1_MessageSent), sender, message);
10
            }
11
            else
12
            {
13
                // Aktualisiere die UI-Komponente mit den empfangenen Daten
14
                //labelData.Text = message;
15
            }
16
        }

Fehlermeldung: Der Name MessageSent ist im aktuellen Kontext nicht vorhanden.

Warum kann ich nicht in der anderen Form MessageSent verwenden?

#7665540
Lesenswert?

Zo R. schrieb:

Ja vielen Dank. Immer Dinge vorenthalten. Vielen Dank.

Programmieren lernen ist auch (durchaus anspruchsvolle) Arbeit. Tipps und Hilfestellung zu deiner Eigenleistung kriegst du hier für lau, aber eine ganze Schulung eher nicht. Immerhin würde es immer helfen, den eigenen Kenntnisstand ehrlich zu nennen. Dann wissen wir besser wo wir ansetzen müssen.

#7665787
Lesenswert?

Zo R. schrieb:

Hans schrieb:

Die Fehlermeldung ist ziemlich eindeutig: Sender und Empfänger passen, einfach ausgedrückt, nicht zusammen. Warum, mußt Du schon selber heraus finden.

Ja vielen Dank. Immer Dinge vorenthalten. Vielen Dank.

Das hat nichts mit vorenthalten zu tun. Ich habe das letzte Mal 2019 an einem C# Projekt gearbeitet. Da muß man sich dann auch erst mal wieder einarbeiten wie das genau funktioniert und ehe ich da auf die Schnelle was Falsches sage halte ich mich diesbezüglich lieber zurück. Allerdings weis ich noch, das wir da sehr viel mit Databinding gelöst haben. Fairerweise muß ich dazu sagen das das Projekt mit WPF gemacht wurde und da ist Bindig einfach die bessere Alternative. Die Fehlermeldung zu lesen, ist nun auch kein Teufelswerk.

Aber ich merke schon Du hast gar keinen Bock Dich mit der Thematik auseinander zusetzen, Du bemühst lieber KI an statt selbst zu denken.

OP #7665864
Lesenswert?

Hans schrieb:

Aber ich merke schon Du hast gar keinen Bock Dich mit der Thematik auseinander zusetzen, Du bemühst lieber KI an statt selbst zu denken.

Was heißt da ich würde mich nicht bemüht. Die KI habe ich als letztes benutzt und hat mir nicht sonderlich viel geholfen. Ich habe anstatt einen Kollegen von einer anderen Abteilung gefragt.

#7665885
Lesenswert?

Zo R. schrieb:

Die KI habe ich als letztes benutzt und hat mir nicht sonderlich viel geholfen.

Das war/ist bei solchen speziellen Sachen zu befürchten.

Diese Thematik muß man sich selbst erarbeiten sonst wird das nichts. Eine guteBasis dafür ist z.B. Microsoft Learn, da gibt es ein recht umfangreiches Kapitel zum Thema "Databinding mit Windows Forms" (https://learn.microsoft.com/de-de/dotnet/desktop/winforms/data/overview?view=netdesktop-8.0). Das muß man halt durcharbeiten und es ist natürlich nicht in 5 Minuten erledigt, da muß man schon etwas Zeit einplanen. Das Ganze mal mit einem kleinen Testprojekt ausprobiert, ist da durchaus hilfreich. Aber man muß es halt wollen, KI fragen ist sicher einfacher, aber es führt eben nicht immer Ziel wie man sieht. Die Zeit die Du hier mit KI und Copy & Paste verdattelt hast, wäre in das Durcharbeiten der Thematik deutlich besser investiert gewesen und hätte Dich am Ende deutlich weiter gebracht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren