Jump to content

Calling a form from another form

- - - - -

This topic has been archived. This means that you cannot reply to this topic.
1 reply to this topic

#1
Void

Void

    Programming Expert

  • Members
  • PipPipPipPipPipPip
  • 411 posts
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:

//#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)

public: System::Windows::Forms::NativeWindow^ m_nwndParent;


Assign a handle in the parent form


//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


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

msgToParentForm(MSG_CHILDPAUSE);


Void

#2
Void

Void

    Programming Expert

  • Members
  • PipPipPipPipPipPip
  • 411 posts
Now, you have to handle the callbacks in the parent form


		////////////////////////////////////////////////////////////

		// 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");

			}

					

		}



Change the message code to whatever you like and enjoy!
Void