Autor Beitrag
mkRE
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98



BeitragVerfasst: Mo 07.03.11 23:52 
Hallo leute ich verzweifle.Ich habe hier viele Infos gefunden zu meinen Problemen aber jetzt muss mal eine Frage stellen.

Ich habe mir eine Anwendung aufgebaut die mehrere Fenster beinhaltet.

Es soll sich bei der Anwendung um ein Master Fenster handeln und 6 andere Fenster sind nur neben Anwendungen.

Momentan sieht das ganze so aus ich kann in dem Hauptfenster jeweils 6 verschiedene Fenster öffnen.In den Fenstern kann ich entweder durch alle Fenster wechseln oder ich kann in einem der Fenster jeweils ins Hauptfenster wechseln.

Das alles funktioniert soweit.Aber kommen wir zu meinem problem:

Ich wollte jetzt aus meinem Hauptfenster einfach einen Text in eine comboBox Item eines anderen fensters ausgeben.Da habe ich gemerkt das es gar nicht funktioniert.Wenn ich das betroffene Fenster dann öffne steht dort gar nicht in der ComboBox.

Hat von euch jemand eine oder mehrere Ideen wie ich zwischen Fenstern einen Datenaustausch realisieren kann mit aktuellen Daten die vom Hauptfenster ausgegeben werden aber auch umgekehrt.

Würde mich sehr über Hilfe freuen!!!ich verzweifle gerade.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 08.03.11 00:34 
:welcome: in der EE!

Geht es hier wirklich um Silverlight?

_________________
>λ=
mkRE Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98



BeitragVerfasst: Di 08.03.11 10:28 
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
:welcome: in der EE!

Geht es hier wirklich um Silverlight?



Hi nein es geht eigentlich nur um Net-Framework 3.5 sorry habe mich vertarn.

Aber was ich noch hinzufügen wollte, ist dass ich bei meinem Problem wie schon leicht erwähnt habe sorge habe mit den verschiedenen Fenster Wechseln. Ich habe gestern noch hinbekommen über Child das mein Hauptfenster zumindest zu benutzen ist also ich kann jetzt schon mal Buttons auf dem Hauptfenster öffnen wenn ein anderes Fenster offen ist.

Bloß trotzdem bekomme ich keinen Datenaustausch hin z.B. über:

Window3 Window3 = new Window3();

Window3.comboBox1.Items.Add("hallo leute aus dem C# Forum");

Wenn ich das ganze z.B im Timer Takt in einem Window1 einfüge sollte in de ComboBox im Window3 dieser Text nacheinender pro sekunde auflaufen.Leider passiert das nicht mit meiner Variante.

Weiterhin mache ich mir sorgen das wenn ich von einem Child Fenster direkt in ein anderes wechsel weiterhin keine Funktionen im Hauptfenster wie Buttons aktiv sind.

Wie kann ich diese Problemen entgegen kommen?

Im Hauptfenster sollen eigentlich alle Daten abgelegt bleiben und nur wenn benötigt von dem jeweiligen anderen Fenstern abgerufen werden.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 08.03.11 11:30 
Den Grundlagen des Datenaustausches kannst du dem Tutorial von Th69 entnehmen. Bei WPF geht man mit MVVM dann noch einmal ein paar Schritte weiter, z.B. zum Mediator Design.

user profile iconmkRE hat folgendes geschrieben Zum zitierten Posting springen:
Im Hauptfenster sollen eigentlich alle Daten abgelegt bleiben
Nein, Daten sollten immer von der Oberfläche getrennt sein. Das ist bei WPF nochmal um einiges wichtiger als bei anderen APIs. In diesem Sinne: Bist du dir sicher, dass es klug ist, jetzt schon mit WPF anzufangen :nixweiss: ?

_________________
>λ=
mkRE Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98



BeitragVerfasst: Di 08.03.11 13:41 
Vielleicht habe ich mich falsch augedrückt. Ich möchte halt eine Applikation erstellen wobei ich über das Fenster z.B. über einen Button einer Variable nicht im Hauptfenster selber sondern dem Programm sage Int32 Merker = 100;

Ich möchte die Daten ja nicht im Fenster selber ablegen da ist mir schon bewusst.

Was meinst du den eigentlich mit Klug und jetzt schon mit WPF anzufangen?Ihrgendwann muss man ja damit anfangen.

Möglicherweise formuliere ich mangelhaft aber ich denke die Problematik habe ich deutlich beschrieben oder?

zumindest jetzt.

Gehts den nicht auch ohne ein paar Schritte weiter zu gehen?
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 08.03.11 14:44 
user profile iconmkRE hat folgendes geschrieben Zum zitierten Posting springen:
Vielleicht habe ich mich falsch augedrückt.
Ich glaube schon, dass das Tutorial dir weiterhelfen sollte - dein Code oben taucht z.B. direkt unter "Anfängerfehler" auf ;) .

user profile iconmkRE hat folgendes geschrieben Zum zitierten Posting springen:
Ihrgendwann muss man ja damit anfangen.
Ja, aber dieses "irgendwann" folgte bei den meisten nach Jahren Erfahrung mit Winforms und dadurch ereignisorientierter Programmierung, OOP im Allgemeinen etc. :) . Kann schon sein, dass sich das spätestens mit WP7 geändert hat und bald niemand mehr Winforms überhaupt anfasst, aber mir persönlich war die WPF-Lernkurve auch mit Winforms-Hintergrund schon steil genug :nixweiss: .

_________________
>λ=
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4796
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 08.03.11 16:24 
Hallo,

auch ich sehe es so wie Kha.
Ich selber lerne auch gerade WPF und nur weil ich schon jahrelange Erfahrung mit WinForms und OOP habe (und auch selber schon mal ein ähnliches System mittels XML-Dateien programmiert habe: in C++ für "Sacred 2"), fällt es mir einigermaßen zu.
Aber für einen Programmieranfänger empfehle ich immer folgende Reihenfolge:
1. Konsolenprogrammierung
2. WinForms
3. WPF
(und dazwischen sollten jeweils mindestens einige Monate liegen, d.h. so ca. 2-3 größere Projekte)

Aber meinen Artikel kann ich nur empfehlen :lol:
mkRE Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98



BeitragVerfasst: Di 08.03.11 23:48 
Ich freue mich sehr über eure Antworten und über den Link. Aber trotzdem wollte ich betonen das ich nach weiteren Tipps gefragt habe die mir evtl. bei meinem Problem direkt weiterhelfen ohne das ich Monate lang Konsolen und Forms Anwendungen üben soll.

Ich stehe dazu das ich ein Anfänger bin nobody ist perfekt!!

Das ganze habe ich schon hinter mir und mit Forms auch viele Anwendungen erstellt die sauber funktionieren auch größere bloss habe ich nie einen Datenaustausch zwischen verschiedenen Fenstern oder auch Forms genutzt bzw habe das mit dem Borland Builder C++ auf andere Art und weise durchgeführt.

Ansonsten sind alle Applikationen auf einem Fenster durchgeführt worden so gab es nie Probleme Daten abzulegen wie jeder weiß.

Ich verwende Momentan und das erste mal ca. 2 Monate lang mit Pausen Visual Studio wobai ich C# lernen wollte und dabei WPF Anwendungen lernen will.Da ich jetzt ein für mich wie es sich im Moment herausgestellt hat komplexes Thema begonnen habe wollte ich hier einfach einige Tipps sammeln oder Beispiele für WPF. Und keine Grundlegenden Themen.


Soll ich mich dann am besten ertmal an deinen Link halten?oder gibts auch Beispiele in dieser Form auch für WPF Anwendungen??

Erstmal einfach eine blöde Zahl von einem zum anderen Fenster schieben können das wehre schön!!
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 09.03.11 00:43 
user profile iconmkRE hat folgendes geschrieben Zum zitierten Posting springen:
Soll ich mich dann am besten ertmal an deinen Link halten?
Ja, damit dürftest du am schnellsten ans Ziel kommen. Den Text kannst du quasi 1:1 für WPF übernehmen, denn im Grunde geht es ja nur um das Konzept der einseitigen Kopplung, das du auch bei "höheren" Ansätzen benötigen wirst.

_________________
>λ=
mkRE Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98



BeitragVerfasst: Mi 09.03.11 09:51 
Kann ich mich ruhig mit FRagen an euch wenden?Zu dem Thema im Link?

Ich denke das eine oder andere werde ich wohl nachfragen müssen.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4796
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 09.03.11 11:16 
Hallo,

ok, wenn du schon mit dem Borland C++ Builder gearbeitet hast, dann sollten dir ja Eigenschaften (Properties) und Ereignisse (Events) ja etwas sagen.
Und mein Artikel beschreibt eben genau, wie man diese in C# anwendet, um Daten zwischen verschiedenen Klassen oder Forms auszutauschen.

Bei WPF kommt hinzu, daß du neben dem Programmcode ja auch noch die Struktur der XAML-Dateien erstellen (d.h. verstehen) mußt.
Ein Großteil der Kommunikation findet aber auch einfach per DataBinding statt (insbesondere wenn man sich an das MVVM hält.

Es gibt also ersteinmal eine Reihe von Themen, in die du dich reinlesen mußt.

Ich will dich aber nicht entmutigen, sondern dir lieber einen langsam ansteigenden Weg bereiten (anstatt daß du plötzlich vor einem riesigen Berg stehst ;-))

Und konkrete Fragen beantworten wir hier gerne...
IsNull
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 97
Erhaltene Danke: 11


VS 2010, C#, AHK
BeitragVerfasst: Fr 11.03.11 12:26 
Oder um das Grunsätzliche Design einfach zu umschreiben:

Deine Daten gibt es nur einmal an zentraler Stelle, und diese können dann beliebig oft in belibigen Formen dargestellt werden. Die zentralen Datenstelle stellt dann Events bereit, die alle Clienten (ein Client is in deinem Fall ein Form was Daten anzeigen will) mithören können.
So werden Änderungen an zentraler stelle gemacht und diese dann über Events allen Interessierten mitgeteilt.

So ein Design geht dann Hand in Hand mit der Trennung der Daten von der View/Form (allg. Darstellung).


Dieses Design kann man mit WinForms nutzen und es passt auch wunderbar in WPF mit dem MVMV Pattern. Man muss bloss aufpassen dass man es nicht komplizierter macht als nötig: Die GoF welche sehr oft mit C++/Smalltalk Beispielen gearbeitet haben, konnten Features von C# noch nicht gekannt haben. Mit den Events unter C# kann man sich das Design so ziemlich vereinfachen. Das zeigt Th69 ja schön in seinem Tutorial.
mkRE Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98



BeitragVerfasst: Fr 11.03.11 20:57 
Hey erstmal danke euch.Ich versuche erstmal was hinzubekommen und melde mich sofern ich Fragen habe.
mkRE Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98



BeitragVerfasst: Sa 12.03.11 20:30 
Hallo zusammen

ich habe Folgenden code in meinem Hauptfenster.xaml.cs geschrieben:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
Window1(Window4 window4)
        {
            this.window4 = window4;
        }

        private Window4 window4;


soweit so gut

jetzt führe ich in einem Timer Folgenden Code aus:

window4.listBox1.Items.Add("Halllo Hallo Hallo");


so habe ich es aus einem der Beispiele aus dem Tutorial von Kha entnommen.



Nachdem der Debugger erfolgreich ohne Fehler startet und eine sekunde des Timers abgelaufen ist bekomme ich einen Hinweis NullReferenceException wurde nicht behandelt.

Beispiele zur Fehlerbehebung sind z.B: Schlüsselwort "new" verwenden bzw. eine Objektinstanz erstellen. Aber im Beispiel steht nicht darüber. Kann es sein das es an meiner listbox1 liegt?

Sollte ich mir lieber eine Klasse erstellen und entsprechend der neuen Klasse in meinem Window4 die listBox1 ansprechen??

Habt ihr eine Idee?

Moderiert von user profile iconKha: C#-Tags hinzugefügt
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 13.03.11 19:48 
Da hast du etwas falsch verstanden. Denn erstens ist der Konstruktor für die Subform gedacht (was bei dir wohl Window4 ist? Aussagekräftige Bezeichner wären nett :) ) und zweitens hast du hoffentlich nicht den nachfolgenden Satz überlesen ;) : "Jedoch ist dies auch nicht die beste Lösung, da ein ungeordnetes Form (SubForm) niemals direkten Zugriff auf übergeordnete Forms (hier MainForm) tätigen sollte! "
In der Hauptform musst du jedenfalls keine Instanz der Subform entgegennehmen, da die Hauptform ja für das Öffnen selbst verantwortlich ist. Du erstellst also eine Window4-Instanz, speicherst sie in deinem Klassenfeld und kannst dann über Methoden/Ereignisse von Window4 die Subform manipulieren.

user profile iconmkRE hat folgendes geschrieben Zum zitierten Posting springen:
aus dem Tutorial von Kha
Die Verantwortung dafür übernimmt aber weiterhin der Autor, Th69 :mrgreen: .

_________________
>λ=
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4796
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 14.03.11 11:06 
Hi,

"ich weise jede Verantwortung von mir" ;-)

Tja Kha, jetzt bist du dafür verantwortlich... (so einfach geht das in einem Forum :lol:)

(Warum gibt es eigentlich nicht "grau" als Textfarbe hier im Forum? Für kurze Offtopic-Sätze fände ich das ganz nett.)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 14.03.11 12:32 
user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
(Warum gibt es eigentlich nicht "grau" als Textfarbe hier im Forum? Für kurze Offtopic-Sätze fände ich das ganz nett.)
Weil du es nicht nutzt... :mrgreen:
mkRE Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98



BeitragVerfasst: Mo 14.03.11 13:10 
Den Satz verstehe ich nicht so ganz:

Du erstellst also eine Window4-Instanz, speicherst sie in deinem Klassenfeld und kannst dann über Methoden/Ereignisse von Window4 die Subform manipulieren.

Meinst du damit das ich die Window4-Instanz(Sub-Form) in meine (MainForm) Window1 speichern soll?? weil du am ende Window4 geschrieben hast.Und verstehe ich das allgemein richtig, dass die Sub-Form quasi meine Window4 ist und die MainForm Quasi meine Window1 darstellt?!ist doch richtig oder?

Den Hinweis habe ich gelesen den du noch angedeutet hast aber ich wollte es ja erstmal probieren.

Allgemein würde ich gerne die Event Thematik aus dem Thread anwenden aber ich komme mit dem Beispiel nicht ganz klar.Verstehe das nicht finde dort kein Ansatz weil mich die dort benutzten Methoden Namen verwirren.Wie würde den ein Beispiel für meine Windows aussehen für den fall?
mkRE Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98



BeitragVerfasst: Mo 14.03.11 13:10 
Was hält ihr von der Lösung, wenn ich mir eine KLasse erstelle die quasi die daten von beiden Windows verwaltet und ich die Daten somit hin und her schiebe. Klasse Datenaustausch kennt dann quasi Window1 und Window4 und verwaltet diese Daten.

Ist das ein guter Ansatz?Oder erwarten mich dort Überraschungen die ich noch nicht hervorsehen kann?Worauf müsste ich da achten?Dazu habe ich mir die Frage gestellt wie ich bei einem Window herausfinden kann bzw. abfragen kann ob es geöffnet ist ohne quasi eigene Abfrage Variablen zu erstellen.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 14.03.11 13:33 
Genau das ist schlecht. Eine Seite darf die andere kennen, aber nicht umgekehrt. Du kannst für die andere Richtung ja Events bereitstellen.