Autor Beitrag
Phelios
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38

Win XP, Win 7
Visual Studio 2012 Express C#
BeitragVerfasst: Mo 18.05.09 15:55 
Hallo Leute ...

Sorry, dass ich Euch nochmal nerven muß. :oops:

Ich habe vom Parent-Window aus, KEINEN Zufriff auf die
Variablen, bzw. Methoden des Child-Windows.
z.B. "public void ProjectSave()" oder "public void ProjectLoad()"

Jedes ChildWindow wird mit
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
private void mnuFileNew_Click(object sender, EventArgs e)
{
  ProjectWin pw = new ProjectWin(s);
  pw.MdiParent = this;
  pw.Show();
}


vom Parent Window Menü erzeugt.
"s" ist der ProjektName, der auch existiert.

Trotzdem komme ich vom ParentWindow weder an die
Variablen, noch an die Methoden ran, obwohl alles
"public" ist.

Auch über "ActiveMdiChild" funktioniert es nicht.

Ich steh echt auf dem Schlauch, weil ich leider, weder bei
Microsoft, noch hier im Forum fündig geworden bin.

Für einen heißen Tip wäre ich sehr dankbar.

_________________
Greeting
( Karl )
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 18.05.09 16:02 
user profile iconPhelios hat folgendes geschrieben Zum zitierten Posting springen:
Ich steh echt auf dem Schlauch, weil ich leider, weder bei
Microsoft, noch hier im Forum fündig geworden bin.
OOP-Grundlagen lassen sich schwer suchen: Da ActiveMdiChild vom Typ Form ist, brauchst du einen Cast, um auf Methoden deiner ChildWindow-Klasse zugreifen zu können.
Falls du das schon berücksichtigt hast, wären Code + Fehlermeldung nicht schlecht :) .

_________________
>λ=
Phelios Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38

Win XP, Win 7
Visual Studio 2012 Express C#
BeitragVerfasst: Mo 18.05.09 17:52 
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:

OOP-Grundlagen lassen sich schwer suchen: Da ActiveMdiChild vom Typ Form ist, brauchst du einen Cast, um auf Methoden deiner ChildWindow-Klasse zugreifen zu können.

Ich hoffe, dass ich Dich jetzt richtig verstanden habe, denn der Ausdruck Cast
ist mir in Bezug auf OOP nicht geläufig, aber ich glaube, dass ich weiß, was Du meinst.

Um z.B. das Aktuelle Fenster zu schließen, mach ich folgendes:
Das sind alles Methoden aus dem ParentWin.
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
// Aktuelles Projektfenster schließen
private void mnuEditClose_Click(object sender, EventArgs e)
{
  if(ActiveMdiChild != null)
  {
    ActiveMdiChild.Close();
    ActiveMdiChild.Dispose();
   }
}

Oder Alle Fenster Minimieren
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
// Alle Fenster minimieren
private void mnuWindowMinimizedAll_Click(object sender, EventArgs e)
{
  Form[] arrFrm = this.MdiChildren;
  foreach(Form f in arrFrm)
  {
    f.WindowState = FormWindowState.Minimized;
  }
}

Wobei "f" hier wohl der Cast ist.
Ich hoffe, ich hab Dich richtig verstanden.
Wenn nicht, teile mir bitte mit, WAS GENAU Du an Infos brauchst,
schließlich kannst Du mir nicht helfen, wenn Du von mir versehendlich
mit falschen Infos versorgt wirst.
KEINE FEHLERMELDUNGEN. Die Fehlerliste ist leer.

Aber der Witz ist, das das alles funktioniert und es ist mir völlig
schleierhaft, warum ich an meine eigenen Definitionen nicht heran komme.
Auf ALLE Eigenschaften des ChildWin habe ich vollen Zugriff,
nur nicht auf meine eigene Implementierungen.

Ich hoffe, dass wir jetzt der Lösung ein Stück näher kommen.

Danke noch mal für Deine Tipps

_________________
Greeting
( Karl )
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 18.05.09 18:12 
Ein Cast ist sowas:
ausblenden C#-Quelltext
1:
2:
ChildWindow child = (ChildWindow)ActiveMdiChild;
child.LoadProject();



user profile iconPhelios hat folgendes geschrieben Zum zitierten Posting springen:
KEINE FEHLERMELDUNGEN. Die Fehlerliste ist leer.
Ich dachte eher an die Meldungen, wenn du einfach mal versuchst, eine Methode der Klasse aufzurufen. Die Fehlermeldung sollte ziemlich genau das gleiche wie ich in meinem ersten Beitrag sagen.

_________________
>λ=
Phelios Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38

Win XP, Win 7
Visual Studio 2012 Express C#
BeitragVerfasst: Mo 18.05.09 19:33 
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
Ein Cast ist sowas:
ausblenden C#-Quelltext
1:
2:
ChildWindow child = (ChildWindow)ActiveMdiChild;
child.LoadProject();


Wenn ich das so sehe, muß ich sagen, dass mir das doch
bekannt vorkommt. Ich hab's irgendwo schon mal gelesen.
Ich hab's probiert, und es funktioniert.

Aber mit einer Frage muß ich Dich noch nerven...
Wie gehe ich vor, wenn es eine Methode "SaveAll()" gibt.
Kannst du mir noch'n Tip geben, wie ich, z.B. mit "foreach()",
vorgehe, denn mit "ActiveMdiChild" funktioniert's ja nicht.

_________________
Greeting
( Karl )
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 18.05.09 19:39 
user profile iconPhelios hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich das so sehe, muß ich sagen, dass mir das doch
bekannt vorkommt. Ich hab's irgendwo schon mal gelesen.
Gut, dann hoffe ich mal, dass dieser Hinweis zu foreach reicht ;) : Der Code stimmt soweit schonmal, nur musst du innerhalb der Schleife f eben wieder nach ChildWindow casten. Das Ergebnis am besten in einer neuen Variablen speichern, wie bei meinem Beispiel.

_________________
>λ=
Phelios Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38

Win XP, Win 7
Visual Studio 2012 Express C#
BeitragVerfasst: Mo 18.05.09 20:24 
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:

Gut, dann hoffe ich mal, dass dieser Hinweis zu foreach reicht ;) : Der Code stimmt soweit schonmal, nur musst du innerhalb der Schleife f eben wieder nach ChildWindow casten. Das Ergebnis am besten in einer neuen Variablen speichern, wie bei meinem Beispiel.

Okay ...
Ich danke Dir für Deine ausführliche Hilfe.
Ich bin jetzt jedenfalls ein großes Stück weiter.

Thanks to you :)

Bis denne

_________________
Greeting
( Karl )