Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. Visual Basic
  4. How to pass values between 2 mdi childs?(without new form)

How to pass values between 2 mdi childs?(without new form)

Scheduled Pinned Locked Moved Visual Basic
questioncssalgorithmshelptutorial
14 Posts 4 Posters 1 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • D DeDelva

    Hey peepz, After a big torture of searching i came 2 my last hope. Situation : I have a mdiparent where i open mdichild A. From mdichild A, i click a button to open mdichild B. I "simply" want to pass a value from mdichild B to mdichild A(not a new form). Question: How can i get a value from form B to retreive this in form A(bouth mdichilds). form.show =>opens a new form dim formbla as new blabla =>opens also a new form already tried a less best practice : formA.lblDate.Text = DataGridView1.Item(9, i).Value.ToString() but this only works when i use the show method... I'm begging 4 help Somebody? Thx in advance

    S Offline
    S Offline
    Simon_Whale
    wrote on last edited by
    #2

    Have a read of these Step by Step: Event handling in VB.NET[^] Delegates[^] and choose which one that best suits your needs

    Lobster Thermidor aux crevettes with a Mornay sauce, served in a Provençale manner with shallots and aubergines, garnished with truffle pate, brandy and a fried egg on top and Spam - Monty Python Spam Sketch

    1 Reply Last reply
    0
    • D DeDelva

      Hey peepz, After a big torture of searching i came 2 my last hope. Situation : I have a mdiparent where i open mdichild A. From mdichild A, i click a button to open mdichild B. I "simply" want to pass a value from mdichild B to mdichild A(not a new form). Question: How can i get a value from form B to retreive this in form A(bouth mdichilds). form.show =>opens a new form dim formbla as new blabla =>opens also a new form already tried a less best practice : formA.lblDate.Text = DataGridView1.Item(9, i).Value.ToString() but this only works when i use the show method... I'm begging 4 help Somebody? Thx in advance

      D Offline
      D Offline
      DaveAuld
      wrote on last edited by
      #3

      You could create a public method on formb that returns the value you want. Then call it from forma.

      Dave Find Me On: Web|Facebook|Twitter|LinkedIn


      Folding Stats: Team CodeProject

      D 1 Reply Last reply
      0
      • D DaveAuld

        You could create a public method on formb that returns the value you want. Then call it from forma.

        Dave Find Me On: Web|Facebook|Twitter|LinkedIn


        Folding Stats: Team CodeProject

        D Offline
        D Offline
        DeDelva
        wrote on last edited by
        #4

        Hey, First of all thx for the reply,reallllly appreciate that :) Second my apologizes if i'm working on your nerve system. I'm an advanced noob with vb.net But can somebody explain it with some example's? I checked the event tutorial but there must be a faster way no?(don't like to add classes for a single transport). So i like the public method more, but can you show me an example how i should write the method in form b and how to access my values in form a? Thanks again

        D 1 Reply Last reply
        0
        • D DeDelva

          Hey, First of all thx for the reply,reallllly appreciate that :) Second my apologizes if i'm working on your nerve system. I'm an advanced noob with vb.net But can somebody explain it with some example's? I checked the event tutorial but there must be a faster way no?(don't like to add classes for a single transport). So i like the public method more, but can you show me an example how i should write the method in form b and how to access my values in form a? Thanks again

          D Offline
          D Offline
          DaveAuld
          wrote on last edited by
          #5

          You could do something like this; Form 2 Code (The one you want to get some value from):

          Private aValue as String = "Hello World!"

          Public Function GetTheValue() As String

          return aValue

          End Function

          Form 1 Code (The one wanting the value, code inside a button or where ever)

          Public Sub DoSomething
          Dim theOtherForm as new Form1
          MessageBox(theOtherForm.GetTheValue)
          End Sub

          Dave Find Me On: Web|Facebook|Twitter|LinkedIn


          Folding Stats: Team CodeProject

          D 1 Reply Last reply
          0
          • D DaveAuld

            You could do something like this; Form 2 Code (The one you want to get some value from):

            Private aValue as String = "Hello World!"

            Public Function GetTheValue() As String

            return aValue

            End Function

            Form 1 Code (The one wanting the value, code inside a button or where ever)

            Public Sub DoSomething
            Dim theOtherForm as new Form1
            MessageBox(theOtherForm.GetTheValue)
            End Sub

            Dave Find Me On: Web|Facebook|Twitter|LinkedIn


            Folding Stats: Team CodeProject

            D Offline
            D Offline
            DeDelva
            wrote on last edited by
            #6

            Thx 4 the reply, Your solution works but not how i wanted... avalue = "hello world" if i load the form where i want to get my data from i do: avalue = "changethevaluethatiwanttohave" so i load that form and avalue is changed (on the form) then if i go to the form where i want to get my data in i do : GetTheValue() but still giving me "hello world" back instead of changetevaluethatiwanttohave... How come?because avalue is declared global but if i change my global var it wil not change when a call the function in the other form?? regards

            D 1 Reply Last reply
            0
            • D DeDelva

              Thx 4 the reply, Your solution works but not how i wanted... avalue = "hello world" if i load the form where i want to get my data from i do: avalue = "changethevaluethatiwanttohave" so i load that form and avalue is changed (on the form) then if i go to the form where i want to get my data in i do : GetTheValue() but still giving me "hello world" back instead of changetevaluethatiwanttohave... How come?because avalue is declared global but if i change my global var it wil not change when a call the function in the other form?? regards

              D Offline
              D Offline
              DaveAuld
              wrote on last edited by
              #7

              This is occurring because you are creating a new form each time. You would need to find the form you want to work worth and then call its method. If you have a number of forms open, you could use the ApplicationOpenForms to find the reference e.g.

                  For Each theForm As Form In Application.OpenForms
              
                      If theForm.Name = "FormOrder" Then
                          MessageBox(theForm.GetSomeValue)
                      End If
              
                  Next
              

              Or if you know the instance of the form exists you can just reference it directly;

              Dim theForm as Form2 ' Note No NEW
              MessageBox(theForm.GetTheValue)

              You would want to do some error checking to make sure you do end up with a reference to the target form and not a null.

              Dave Find Me On: Web|Facebook|Twitter|LinkedIn


              Folding Stats: Team CodeProject

              D 1 Reply Last reply
              0
              • D DaveAuld

                This is occurring because you are creating a new form each time. You would need to find the form you want to work worth and then call its method. If you have a number of forms open, you could use the ApplicationOpenForms to find the reference e.g.

                    For Each theForm As Form In Application.OpenForms
                
                        If theForm.Name = "FormOrder" Then
                            MessageBox(theForm.GetSomeValue)
                        End If
                
                    Next
                

                Or if you know the instance of the form exists you can just reference it directly;

                Dim theForm as Form2 ' Note No NEW
                MessageBox(theForm.GetTheValue)

                You would want to do some error checking to make sure you do end up with a reference to the target form and not a null.

                Dave Find Me On: Web|Facebook|Twitter|LinkedIn


                Folding Stats: Team CodeProject

                D Offline
                D Offline
                DeDelva
                wrote on last edited by
                #8

                Dave, Thanks again you really are a patient man right?... Anyway, I can find the form and i know that it exists i will pass some code to give you a better view before i stop working with mdi containers.(last question hehe). what i realllllyy need to accomplish is this: Form A is a list of costumers where i can fill in textboxes with data. If i want to change a costumers data i click on a button search. This will go to form B where i can search through a datagridview of custumers.If i click a celrow the row data has to go to form A in the txt's. Form B code:

                If Not (e.RowIndex = -1) Then
                DataGridView1.Rows(e.RowIndex).Selected = True
                End If
                i = DataGridView1.CurrentRow.Index
                formA.TextBox1.Text = DataGridView1.Item(0, i).Value.ToString()

                enso.... simply explained is that i need a formA.show() before it will pass the dgvitems in the txt. I work between 2 mdichildrens so i cannot do this, also not possible the work with new because the form is already opened. Can somebody help me out of this misery??? :( Sorry for bothering greetz & thx dave;)

                D 1 Reply Last reply
                0
                • D DeDelva

                  Dave, Thanks again you really are a patient man right?... Anyway, I can find the form and i know that it exists i will pass some code to give you a better view before i stop working with mdi containers.(last question hehe). what i realllllyy need to accomplish is this: Form A is a list of costumers where i can fill in textboxes with data. If i want to change a costumers data i click on a button search. This will go to form B where i can search through a datagridview of custumers.If i click a celrow the row data has to go to form A in the txt's. Form B code:

                  If Not (e.RowIndex = -1) Then
                  DataGridView1.Rows(e.RowIndex).Selected = True
                  End If
                  i = DataGridView1.CurrentRow.Index
                  formA.TextBox1.Text = DataGridView1.Item(0, i).Value.ToString()

                  enso.... simply explained is that i need a formA.show() before it will pass the dgvitems in the txt. I work between 2 mdichildrens so i cannot do this, also not possible the work with new because the form is already opened. Can somebody help me out of this misery??? :( Sorry for bothering greetz & thx dave;)

                  D Offline
                  D Offline
                  DaveAuld
                  wrote on last edited by
                  #9

                  Ok, let me show you 2 methods; The first is the cheap and easy dirty method............ In this example, there are 2 forms the first has a textbox and a button, the second a listbox and a button, the first calls the second to find the customer the user wants, then returns this top the first form;

                  Public Class FormMain
                  Private Sub ButtonLookup_Click(sender As System.Object, e As System.EventArgs) Handles ButtonLookup.Click

                      Dim selectForm As New FormCustomerLookup
                  
                      TextSelectedCustomer.Text = selectForm.FindCustomer
                  
                      'Finished with the dialog
                      selectForm.Close()
                  
                  End Sub
                  

                  End Class

                  Public Class FormCustomerLookup
                  Private ItemHasBeenSelected = False

                  Private Sub FormCustomerLookup\_Load(sender As Object, e As System.EventArgs) Handles Me.Load
                      'Add 10 customer to the listbox
                  
                      For x As Integer = 0 To 9
                          ListBoxCustomer.Items.Add("Customer" + x.ToString)
                      Next
                  
                  End Sub
                  
                  Private Sub ButtonSelect\_Click(sender As System.Object, e As System.EventArgs) Handles ButtonSelect.Click
                      If ListBoxCustomer.SelectedIndices.Count > 0 Then
                          ItemHasBeenSelected = True
                      End If
                  End Sub
                  
                  
                  Public Function FindCustomer() As String
                  
                      'Show the form to the user
                      Me.Visible = True
                  
                      Do While Not ItemHasBeenSelected
                          'Keep the form waiting for the user to make their selection
                          'but Don't hang the interface by using the Nasty DoEvents :)
                          Application.DoEvents()
                      Loop
                  
                      Me.Visible = False
                  
                      'Return the selected customer
                      Return ListBoxCustomer.Items(ListBoxCustomer.SelectedIndices(0))
                  
                  End Function
                  

                  End Class

                  The second method uses events;

                  Public Class FormMain

                  Private WithEvents selectForm As FormCustomerLookup = Nothing
                  
                  Private Sub ButtonLookup\_Click(sender As System.Object, e As System.EventArgs) Handles ButtonLookup.Click
                  
                      selectForm = New FormCustomerLookup
                      selectForm.Show()
                  
                  End Sub
                  
                  Private Sub selectForm\_CustomerSelected(item As String) Handles selectForm.CustomerSelected
                      TextSelectedCustomer.Text = item
                  
                      'Finished with the dialog
                      selectForm.Close()
                  End Sub
                  

                  End Class

                  Public Class FormCustomerLookup

                  Public Event CustomerSelected(ByVal item As String)
                  
                  Private Sub FormCust
                  
                  D 2 Replies Last reply
                  0
                  • D DaveAuld

                    Ok, let me show you 2 methods; The first is the cheap and easy dirty method............ In this example, there are 2 forms the first has a textbox and a button, the second a listbox and a button, the first calls the second to find the customer the user wants, then returns this top the first form;

                    Public Class FormMain
                    Private Sub ButtonLookup_Click(sender As System.Object, e As System.EventArgs) Handles ButtonLookup.Click

                        Dim selectForm As New FormCustomerLookup
                    
                        TextSelectedCustomer.Text = selectForm.FindCustomer
                    
                        'Finished with the dialog
                        selectForm.Close()
                    
                    End Sub
                    

                    End Class

                    Public Class FormCustomerLookup
                    Private ItemHasBeenSelected = False

                    Private Sub FormCustomerLookup\_Load(sender As Object, e As System.EventArgs) Handles Me.Load
                        'Add 10 customer to the listbox
                    
                        For x As Integer = 0 To 9
                            ListBoxCustomer.Items.Add("Customer" + x.ToString)
                        Next
                    
                    End Sub
                    
                    Private Sub ButtonSelect\_Click(sender As System.Object, e As System.EventArgs) Handles ButtonSelect.Click
                        If ListBoxCustomer.SelectedIndices.Count > 0 Then
                            ItemHasBeenSelected = True
                        End If
                    End Sub
                    
                    
                    Public Function FindCustomer() As String
                    
                        'Show the form to the user
                        Me.Visible = True
                    
                        Do While Not ItemHasBeenSelected
                            'Keep the form waiting for the user to make their selection
                            'but Don't hang the interface by using the Nasty DoEvents :)
                            Application.DoEvents()
                        Loop
                    
                        Me.Visible = False
                    
                        'Return the selected customer
                        Return ListBoxCustomer.Items(ListBoxCustomer.SelectedIndices(0))
                    
                    End Function
                    

                    End Class

                    The second method uses events;

                    Public Class FormMain

                    Private WithEvents selectForm As FormCustomerLookup = Nothing
                    
                    Private Sub ButtonLookup\_Click(sender As System.Object, e As System.EventArgs) Handles ButtonLookup.Click
                    
                        selectForm = New FormCustomerLookup
                        selectForm.Show()
                    
                    End Sub
                    
                    Private Sub selectForm\_CustomerSelected(item As String) Handles selectForm.CustomerSelected
                        TextSelectedCustomer.Text = item
                    
                        'Finished with the dialog
                        selectForm.Close()
                    End Sub
                    

                    End Class

                    Public Class FormCustomerLookup

                    Public Event CustomerSelected(ByVal item As String)
                    
                    Private Sub FormCust
                    
                    D Offline
                    D Offline
                    DeDelva
                    wrote on last edited by
                    #10

                    Dave You are the sh*t (positif ofcourse) Maybe for the people who browse to do the same with a datagridview :

                    If DataGridView1.SelectedRows.Count = 0 Then
                    RaiseEvent CustomerSelected(DataGridView1.Item(columnindex, rowindex).Value.ToString())
                    End If

                    Or something... Dave is there is anything i can do 4 you just mail me on facebook (already send you a message) Succes with everything and greetings from belgium

                    1 Reply Last reply
                    0
                    • D DeDelva

                      Hey peepz, After a big torture of searching i came 2 my last hope. Situation : I have a mdiparent where i open mdichild A. From mdichild A, i click a button to open mdichild B. I "simply" want to pass a value from mdichild B to mdichild A(not a new form). Question: How can i get a value from form B to retreive this in form A(bouth mdichilds). form.show =>opens a new form dim formbla as new blabla =>opens also a new form already tried a less best practice : formA.lblDate.Text = DataGridView1.Item(9, i).Value.ToString() but this only works when i use the show method... I'm begging 4 help Somebody? Thx in advance

                      D Offline
                      D Offline
                      DaveyM69
                      wrote on last edited by
                      #11

                      There are two ways of looking at this situation: 1. mdiChildA creates the instance of mdiChildB so it can hold a reference to it. 2. mdiParent holds the children so it has a reference to all of them. I prefer number 2 and when creating mdiChildB I would make mdiChildA raise an event that mdiParent responds to and creates mdiChildB. All communication from the children I do by events to the mdiParent. The parent can then call methods/set properties in any other children that need to respond to events raised by others.

                      Dave
                      Binging is like googling, it just feels dirtier. Please take your VB.NET out of our nice case sensitive forum. Astonish us. Be exceptional. (Pete O'Hanlon)
                      BTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)

                      1 Reply Last reply
                      0
                      • D DaveAuld

                        Ok, let me show you 2 methods; The first is the cheap and easy dirty method............ In this example, there are 2 forms the first has a textbox and a button, the second a listbox and a button, the first calls the second to find the customer the user wants, then returns this top the first form;

                        Public Class FormMain
                        Private Sub ButtonLookup_Click(sender As System.Object, e As System.EventArgs) Handles ButtonLookup.Click

                            Dim selectForm As New FormCustomerLookup
                        
                            TextSelectedCustomer.Text = selectForm.FindCustomer
                        
                            'Finished with the dialog
                            selectForm.Close()
                        
                        End Sub
                        

                        End Class

                        Public Class FormCustomerLookup
                        Private ItemHasBeenSelected = False

                        Private Sub FormCustomerLookup\_Load(sender As Object, e As System.EventArgs) Handles Me.Load
                            'Add 10 customer to the listbox
                        
                            For x As Integer = 0 To 9
                                ListBoxCustomer.Items.Add("Customer" + x.ToString)
                            Next
                        
                        End Sub
                        
                        Private Sub ButtonSelect\_Click(sender As System.Object, e As System.EventArgs) Handles ButtonSelect.Click
                            If ListBoxCustomer.SelectedIndices.Count > 0 Then
                                ItemHasBeenSelected = True
                            End If
                        End Sub
                        
                        
                        Public Function FindCustomer() As String
                        
                            'Show the form to the user
                            Me.Visible = True
                        
                            Do While Not ItemHasBeenSelected
                                'Keep the form waiting for the user to make their selection
                                'but Don't hang the interface by using the Nasty DoEvents :)
                                Application.DoEvents()
                            Loop
                        
                            Me.Visible = False
                        
                            'Return the selected customer
                            Return ListBoxCustomer.Items(ListBoxCustomer.SelectedIndices(0))
                        
                        End Function
                        

                        End Class

                        The second method uses events;

                        Public Class FormMain

                        Private WithEvents selectForm As FormCustomerLookup = Nothing
                        
                        Private Sub ButtonLookup\_Click(sender As System.Object, e As System.EventArgs) Handles ButtonLookup.Click
                        
                            selectForm = New FormCustomerLookup
                            selectForm.Show()
                        
                        End Sub
                        
                        Private Sub selectForm\_CustomerSelected(item As String) Handles selectForm.CustomerSelected
                            TextSelectedCustomer.Text = item
                        
                            'Finished with the dialog
                            selectForm.Close()
                        End Sub
                        

                        End Class

                        Public Class FormCustomerLookup

                        Public Event CustomerSelected(ByVal item As String)
                        
                        Private Sub FormCust
                        
                        D Offline
                        D Offline
                        DeDelva
                        wrote on last edited by
                        #12

                        Dave, Can you tell me what changes if i want to send my values to destination form?(using events)? Before it was form 1 opens form2 you select a value and send back to form1 close form2 now i want form1 opens form2 and sends the values immediantly. Can you provide my info about the change in code? Thx in advance agian greetz

                        D 1 Reply Last reply
                        0
                        • D DeDelva

                          Dave, Can you tell me what changes if i want to send my values to destination form?(using events)? Before it was form 1 opens form2 you select a value and send back to form1 close form2 now i want form1 opens form2 and sends the values immediantly. Can you provide my info about the change in code? Thx in advance agian greetz

                          D Offline
                          D Offline
                          DaveAuld
                          wrote on last edited by
                          #13

                          You have all the information about events in the message I previously posted. Providing your Form1 has subscribed to the events of form1, you can raise the event on Form2 from anywhere you want within Form2. Cheers, Dave

                          Dave Find Me On: Web|Facebook|Twitter|LinkedIn


                          Folding Stats: Team CodeProject

                          D 1 Reply Last reply
                          0
                          • D DaveAuld

                            You have all the information about events in the message I previously posted. Providing your Form1 has subscribed to the events of form1, you can raise the event on Form2 from anywhere you want within Form2. Cheers, Dave

                            Dave Find Me On: Web|Facebook|Twitter|LinkedIn


                            Folding Stats: Team CodeProject

                            D Offline
                            D Offline
                            DeDelva
                            wrote on last edited by
                            #14

                            hmm Dave i'm not that good that i can apply your last comment into my project... I searched whole day like crazy: Your example:

                            Public Class FormMain

                            Private WithEvents selectKlant As FormCustomerLookup = Nothing

                            Private Sub ButtonLookup_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonLookup.Click
                            selectKlant = New FormCustomerLookup
                            selectKlant.Show()

                            End Sub
                            

                            Private Sub selectForm_CustomerSelected(ByVal item As String) Handles selectKlant.CustomerSelected
                            TextSelectedCustomer.Text = item
                            selectKlant.Close()
                            End Sub
                            End Class

                            Public Class FormCustomerLookup
                            Public Event CustomerSelected(ByVal item As String)

                            Private Sub ButtonSelect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonSelect.Click
                            If DataGridView1.SelectedRows.Count = 0 Then
                            RaiseEvent CustomerSelected(DataGridView1.Item(2, 1).Value.ToString())
                            End If
                            End Sub
                            End Class

                            I just want to change your givin example. So actually i start on formcustomerlookup and before i raise my event i want to open "formmain" and fill the textbox with the value. do i have to switch the with event or??because i cannot move the

                            selectKlant = New FormCustomerLookup
                            selectKlant.Show()

                            Greetz Dave and hoping 4 some patience again...

                            1 Reply Last reply
                            0
                            Reply
                            • Reply as topic
                            Log in to reply
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes


                            • Login

                            • Don't have an account? Register

                            • Login or register to search.
                            • First post
                              Last post
                            0
                            • Categories
                            • Recent
                            • Tags
                            • Popular
                            • World
                            • Users
                            • Groups