Klasse von Form1 an Form2 und wieder zurück - Compiler WARNING



  • Hallo Leute!

    ich weiß, dieses Thema nervt unheimlich. Aber die Hilfe in der FAQ
    bringt mich leider nicht weiter.

    Vielleicht könnte man ja mal abschließend ausführlich darüber schreiben,
    wie es denn am saubersten funktioniert!

    Folgendes:

    Ich habe meine eigene Klasse CC3 geschreiben. Diese Klasse enthält
    hauptsächlich Eigenschaften, welche ich in meinem Programm bearbeiten möchte.

    Manche Bearbeitungen sollen in einem kleinen eigenen Form geschehen.

    Dazu möcht eich jeweils die gesamte Klasse z.B. Form2 übergeben.
    Dort werden dann ein paar Eigenschaften bearbeitet, und Form2 soll
    dann die ganze Klasse wieder an Form1 zurückgeben.

    So übergebe ich meine Klasse an Form2:
    MyCC ist das Objekt der Klasse CC.

    Form2^ NeuDialog = gcnew Form2;
    NeuDialog->SetCC( this->MyCC );
    NeuDialog->SetCCDelegat = gcnew Form2::SetCCDelegatTyp( this, &Form1::SetCC );
    NeuDialog->ShowDialog();
    

    Die public-Methode setCC von Form2 erledigt den Rest.

    Die Rückgabe habe ich über einen Delegaten realisiert.
    Es befindet sich in Form1 ebenfalls eine setCC-Methode.
    Diese verknüpfe ich mit einem Delegaten von Form2,
    damit ich diese Methode von Form2 aus erreiche.

    Das funktioniert soweit sehr gut.
    Nur bringt mir der Compiler viele Solche Warnmeldungen
    bei der Deklaration des Delegaten in Form2,
    und ebenfalls bei der Deklaration der Methode SetCC in Form2:

    warning C4677: "SetCC": Die Signatur des nicht privaten Members enthält den privaten Assemblytyp "CC3".
    
    Siehe Deklaration von 'CC3'
    

    Das Ganze muss man doch auch Ohne Warning schaffen oder?
    Wie könnte ich das Problem mit der Assembly lösen?

    Mit den Delegaten komm ich jetzt schon recht gut zurecht.
    Aber das mit der Assembly kann ich mir irgendwie nicht erarbeiten.

    Wäre schön wenn jemand von Euch ne Lösung hierzu hätte!

    Besten Dank!



  • Achja,

    noch ne Frage:

    Was bewirkt:

    NeuDialog->ShowDialog(this);
    

    Welche Vortiele habe ich dadurch (this)?
    Wie kann ich das nutzen?
    Kann ich dann ohne Delegaten auf public-Methoden von Form1 zugreifen?

    Ich komm einfach nicht weiter...



  • kaiser-f schrieb:

    Achja,

    noch ne Frage:

    Was bewirkt:

    NeuDialog->ShowDialog(this);
    

    Welche Vortiele habe ich dadurch (this)?
    Wie kann ich das nutzen?

    Guck in der MSDN bei ShowDialog(..) nach. Da stehts.

    Bezogen zu den Fragen von oben:

    kaiser-f schrieb:

    Kann ich dann ohne Delegaten auf public-Methoden von Form1 zugreifen?

    Nein. Aber das findest Du sicher heraus, wenn Du die Doku gelesen hast.

    Simon



  • Hallo,

    Nein. Aber das findest Du sicher heraus, wenn Du die Doku gelesen hast.

    Wenn Du mir zur angesprochenen Doku wenigstens noch einen Link geben könntest,
    dann wären ich und andere Dir sehr Dankbar!

    Gruß,
    Franz





  • Ich hätte jetzt mit ner anderen Doku gerechnet...

    Wenn ich mit den Infos aus der MSDN zurechtgekommen wäre,
    dann hätte ich bestimmt nicht gepostet.

    Mit dieser Version der ShowDialog-Methode können Sie ein bestimmtes Formular oder Steuerelement angeben, das Besitzer des angezeigten Dialogfelds wird. Wenn Sie die Version dieser Methode verwenden, die über keine Parameter verfügt, wird das derzeit aktive Fenster der Anwendung automatisch Besitzer des anzuzeigenden Dialogfelds

    Kann mir jemand beantworten ( oder sagen wo es steht ) welchen konkreten Vorteil es hat,

    ShowDialog(this) anstelle von ShowDialog() zu verwenden?

    Ich kann bei der Ausführung leider keinen merkbaren Unterschied feststellen!

    Ich habe (schon vorher) die MSDN-Doku gelesen und auch schon ewig rumprobiert!
    Auch auf codeproject oder dergleichen finde ich keine Antwort.
    Im Buch Einstieg in Visual C++ 2005 finde ich auch nichts!

    Ich schreibe also besitmmt nicht, weil ich zu faul bin zu suchen!

    Ein einziger Satz Erklärung würde wahrscheinlich genügen.



  • Bevor die Antwort kommt:

    ShowDialog(this) hat den vorteil, dass das Form, welches das andere aufruft,
    Besitzer von jenen wird:

    Das beantwortet nicht meine Frage!



  • Hallo,

    kaiser-f schrieb:

    Bevor die Antwort kommt:

    ShowDialog(this) hat den vorteil, dass das Form, welches das andere aufruft,
    Besitzer von jenen wird:

    Das beantwortet nicht meine Frage!

    Beide Funktionen legen ein(e) Besitzer-Fenster/Form (owner) der mit ShowDialog angezeigten Form fest, einmal explizit durch Übergabe eines Arguments, zur Bestimmung eines ausgewählten Besitzer, einmal implizit dadurch, dass einfach die gerade aktive Form als Besitzer ausgewählt wird. Es macht also dann einen Unterschied, wenn mehrere Formen zur Verfügung stehen, die potenzieller Besitzer sein können, und man eine andere Form als Besitzer wählt, als die gerade aktive Form.

    Was es dann noch bedeutet, welche Folgen es hat, von einer anderen Form "besitzt zu sein", das sind Windows-Grundlagen, die man hier:

    http://msdn.microsoft.com/en-us/library/ms632599(VS.85).aspx#owned_windows

    nachlesen muss.

    MfG,

    Probe-Nutzer


Anmelden zum Antworten