Windows Forms - Fenster kommunizieren
-
Grüße euch!
Ich habe ein Problem mit zwei Fenster. Zum üben möchte ich sie ganz einfach kommunizieren lassen. Ich habe 2 Fenster mit 2 numericUpDown´s und ich möchte, wenn ich im 2. Fenster eine Zahl in das numericUpDown eingebe, dieselbe Zahl im numericUpDown im ersten Fenster steht. Nur habe ich leider keinen Plan wie ich das bewerkstelligen soll. Hab schon mit Handle usw herumprobiert ist aber nichts sinnvolles herausgekommen
Ich weiß also nicht wie ich dem Compiler sagen soll, wo er das numericUpDown findet (im 2. Fenster).
Mit freundlichen Grüßen Chris
-
Hi C++ Christopher,
ist im Grunde nicht schwierig, umzusetzen mit der Vorwärtsdeklaration.
Lege ein numericUpDown und ein Button auf Form1.
Lege ein Click-Event für Button1 an.
Der Code für das Klick-Event muss in die cpp geschoben werden.
Dafür mal ein kleines Video...
http://www.rb-softarticle.com/Code%20trennen.aspx
Füge dann diese Property ein...
public ref class Form1 : public System::Windows::Forms::Form
{...ist bei Dir schon vorhanden, habe ich nur zur Veranschaulichung dazu kopiert.
"Form1.h"
public ref class Form1 : public System::Windows::Forms::Form { public: property Decimal _numeric//Property für numericUpDown1: { void set(Decimal _value) { numericUpDown1->Value::set(_value);//Wert setzsen: } }
Klick-Event von Button1 in Form1.h
} #pragma endregion private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e); }; }
"Projektname.cpp"
In diesem Fall "tstNum.cpp".// tstNum.cpp: Hauptprojektdatei. #include "stdafx.h" #include "Form1.h" #include "Form2.h" using namespace tstNum; [STAThreadAttribute] int main(array<System::String ^> ^args) { // Aktivieren visueller Effekte von Windows XP, bevor Steuerelemente erstellt werden Application::EnableVisualStyles(); Application::SetCompatibleTextRenderingDefault(false); // Hauptfenster erstellen und ausführen Application::Run(gcnew Form1()); return 0; } System::Void Form1::button1_Click(System::Object^ sender, System::EventArgs^ e) { Form2^ _newForm = gcnew Form2(); //Instanz auf Form2: _newForm->Show(this);//Form2 aufrufen und this Zeiger übergeben: }
Nun zur Form2.h
Lege ein numericUpDown auf die Form2 und lege ein ValueChanged-Ereignis an.
"Form2.h"
} #pragma endregion private: System::Void numericUpDown1_ValueChanged(System::Object^ sender, System::EventArgs^ e); };
Nun noch die Form2.cpp
"Form2.cpp"
#include "StdAfx.h" #include "Form2.h" #include "Form1.h" using namespace tstNum; System::Void Form2::numericUpDown1_ValueChanged(System::Object^ sender, System::EventArgs^ e) { Form1^ _form1 = (Form1^)this->Owner;//Eine instanz auf Form1: _form1->_numeric::set(numericUpDown1->Value::get());//Wert an Property in Form1 übergeben: }
Und nun starten.
Hier das Beispiel in 2008, ich denke Du arbeitest mit der 2008...
http://www.rb-softarticle.com/tstNum.rar
Ich hoffe Du blickst da durch
Gruß, Doug_HH
-
puhh... ich arbeite mich mal durch und schreib dann obs was geworden ist
Aber vielen dank für die ganze arbeit!!
Mit freundlichen Grüßen Chris
-
Super, hat alles geklappt!
Weil ich aber überhaupt nicht durchblicke wollte ich fragen ob du ein gutes tut/buch kennst?
danke nochmal für die Arbeit!
Mit freundlichen Grüßen chris
-
Der Code war nun nix dickes, da schon oft gemacht
Hast Du Dir das Projekt runter geladen? Dann nehme ich es wieder vom Server.Kann Dir leider keine guten Bücher für C++/CLI empfehlen, da ich keine guten kenne.
Aber hier ein muss...
**C++ von A bis Z
**
http://www.pronix.de/pronix-1057.htmlC++/CLI in Action (Manning) (Taschenbuch)
http://www.amazon.de/CLI-Action-Manning-Nishant-Sivakumar/dp/1932394818C# Bücher sind auch Sinnvoll und wesentlich besser und mehr Auswahl.
Einstieg in Visual C# 2008. Galileo Computing
Gruß,
Doug_HH
-
Doug_HH schrieb:
ist im Grunde nicht schwierig, umzusetzen mit der Vorwärtsdeklaration.
ich persönlich halte eine Vorwärtsdeklaration für eine Fehler in der Klassenhierachie ... ich würde eher auf eine weitere Klasse (Config oder so) zurückgreifen wo die Werte gespeichert sind und bei einer Änderung entsprechend ein Event feuern welche die Form bearbeiten kann/muss
-
Ja, das .rar file kann ich nicht öffnen obwohl ich WinRAR habe ?!
OK, werde mir so ein buch mal besorgen...
Mit freundlichen Grüßen Chris
-
hi,
was spricht dagegen es über eine einfache Fuktion zu machen?z.b. in Form2 in public ref class Form2 public
String ^test (String ^name){ textBox->Text=name; Strin ^zurueck = "zurück"; return (zurueck); }
in Form1 auf ein Sender legen
{ Form2 ^Fenster = gcnew Form2; Fenster->test ("auf From2"); labelForm1->Text=Fenster->test(labelForm1->Text; Fenster->Show; }
ist eine einfache Übergabe, oder was spricht dagegen?
p.s. die Rar-Datei funktioniert bestens ohne Probleme!!
mfg
-
foxviper schrieb:
ist eine einfache Übergabe, oder was spricht dagegen?
Die Datenkapslung...
-
@foxviper
Mit was öffnest du die Rar datei?Mit freundlichen Grüßen Chris
-
-
hi,
öhm...rechtsKlick...entpacken nach->
ich habe auch nur WinRar3,
-
hm komisch, naja was solls ich hab mir jetzt mal das C++ von A bis Z bestellt
danke nochmal für eure Hilfe!
Mit freundlichen Grüßen Chris