Closed Thread
Results 1 to 2 of 2

Thread: Calling a form from another form

  1. #1
    Void's Avatar
    Void is offline Programming Expert
    Join Date
    Jun 2006
    Posts
    410
    Rep Power
    23

    Calling a form from another form

    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)
    Code:
    public: System::Windows::Forms::NativeWindow^ m_nwndParent;
    Assign a handle in the parent form

    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

  2. CODECALL Circuit advertisement
    Join Date
    Always
    Posts
    Many

     
  3. #2
    Void's Avatar
    Void is offline Programming Expert
    Join Date
    Jun 2006
    Posts
    410
    Rep Power
    23
    Now, you have to handle the callbacks in the parent form

    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");
    			}
    					
    		}
    Change the message code to whatever you like and enjoy!
    Void

Closed Thread

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. Replies: 3
    Last Post: 08-18-2011, 09:17 AM
  2. Replies: 8
    Last Post: 07-05-2011, 05:56 AM
  3. C# calling parent functions from child form
    By NeedHelp in forum C# Programming
    Replies: 13
    Last Post: 06-23-2010, 07:06 AM
  4. problem with codes in calling another form from another project
    By yerdaddy in forum Visual Basic Programming
    Replies: 1
    Last Post: 04-13-2010, 09:09 AM
  5. Replies: 1
    Last Post: 11-19-2007, 09:42 AM

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts