Managed C++ does not let you call a form by its form name. In C# you can do formname.function if it is a public function. You can call a perform click in C# just by the formname. In managed c++ it is a little different.
I had to write a callback function that sends messages just to call a previous form. Here is the code:
At the header I inserted:
Code://#include <windows.h> // You could theoretically include Windows.h to get // all of the WM_ message values, but then your // basic .NET objects like MessageBox would no longer // function without a series of #ifndefs. // Define WM_USER using the value in windows.h #define WM_USER 0x0400 #define WM_PLAY 0x0401 #define WM_STOP 0x0402 #define WM_RESTART 0x0403 #define WM_PAUSE 0x0404 #define WM_EXITME 0x0405 // Define our custom message #define MSG_CHILDTEXT (WM_USER+1) // Nothing #define MSG_CHILDPLAY (WM_PLAY+1) #define MSG_CHILDSTOP (WM_STOP+1) #define MSG_CHILDRESTART (WM_RESTART+1) #define MSG_CHILDPAUSE (WM_PAUSE+1) #define MSG_CHILDEXIT (WM_EXITME+1)
Declare this in the new form (child form)
Assign a handle in the parent formCode:public: System::Windows::Forms::NativeWindow^ m_nwndParent;
Code://myFullTrans->StartClick = ionTimer::Form1::childForm_StartClick(); myFullTrans->m_nwndParent = gcnew System::Windows::Forms::NativeWindow (); myFullTrans->m_nwndParent->AssignHandle (this->Handle);
Create a functino in the new form
Code:private: System::Void msgToParentForm(int m) { // Create a new windows message object System::Windows::Forms::Message msgTextSetter; // Set the message type to our custom message msgTextSetter.Msg = m; // Tell the NativeWindow object to send the message // to the default WndProc of the window whose handle // it represents m_nwndParent->DefWndProc (msgTextSetter); }
Call the function
Code:msgToParentForm(MSG_CHILDPAUSE);
Void
Now, you have to handle the callbacks in the parent form
Change the message code to whatever you like and enjoy!Code://////////////////////////////////////////////////////////// // Override to get messages from child ////////////////////////////////////////////////////////// public: virtual System::Void WndProc(System::Windows::Forms::Message % message) override { try { switch (message.Msg) { // Handle our incoming custom message case MSG_CHILDTEXT: { // This custom message should set the text of the parent's // main textbox break; } // Start the Timer - Run case MSG_CHILDPLAY: { toolStripButton1_Click(nullptr,nullptr); break; } case MSG_CHILDSTOP: { stopBtn_Click(nullptr,nullptr); break; } case MSG_CHILDRESTART: { restartBtn_Click(nullptr,nullptr); break; } case MSG_CHILDPAUSE: { pauseBtn_Click(nullptr,nullptr); break; } case MSG_CHILDEXIT: { myFullTrans->Close(); this->Close(); break; } // All other messages should be sent to the default WndProc // for System::Windows::Forms default: { Form::WndProc (message); break; } } // End Case } catch (System::Exception^) { MessageBox::Show("Error"); } }
Void
There are currently 1 users browsing this thread. (0 members and 1 guests)
Bookmarks