473,320 Members | 1,810 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,320 software developers and data experts.

How do I access a "sibling" form?

I have a MDI Parent Child set of forms
FormContainer --MDIParent
FormStart --MDIChild
FormMain-->MDIChild
FormSliceInfo-->MDIChild

I use the following in the beginning of FomrContainer

Public Class FormContainer
Inherits System.Windows.Forms.Form
Dim frmStart As New FormStart
Dim frmMain As New FormMain
Dim frmSliceInfo As New FormSliceInfo

and so on.

Now when I am in the frmMain, I have a button that I want to use, to access
frmSliceInfo. How do I do that? I am able to access it from the Main Menu,
because it is under the FormContainer, but not from frmMain. In frmMain, I
tried Me.MDIParent.frmSliceInfo but that did not work.

Thanx for your help.
--
Anil Gupte
www.keeninc.net
www.icinema.com
Sep 5 '07 #1
9 2362
Create a module with Public object variables that are named for your forms.

Module1
Public Form1 as Form
public Form2 as Form
End Module

As you instantiate each form, assign the module object variable for that
form accordingly. You then have a reference to each form throughout your
application.

Sep 5 '07 #2
Anil,

Like controls are in a mdi forms all mdi forms in a collection in your
Parent form, you can just go through it to find the right one.

http://msdn2.microsoft.com/en-us/lib...en(vs.71).aspx

Cor
"Anil Gupte" <an*******@icinema.comschreef in bericht
news:%2****************@TK2MSFTNGP05.phx.gbl...
>I have a MDI Parent Child set of forms
FormContainer --MDIParent
FormStart --MDIChild
FormMain-->MDIChild
FormSliceInfo-->MDIChild

I use the following in the beginning of FomrContainer

Public Class FormContainer
Inherits System.Windows.Forms.Form
Dim frmStart As New FormStart
Dim frmMain As New FormMain
Dim frmSliceInfo As New FormSliceInfo

and so on.

Now when I am in the frmMain, I have a button that I want to use, to
access frmSliceInfo. How do I do that? I am able to access it from the
Main Menu, because it is under the FormContainer, but not from frmMain.
In frmMain, I tried Me.MDIParent.frmSliceInfo but that did not work.

Thanx for your help.
--
Anil Gupte
www.keeninc.net
www.icinema.com

Sep 5 '07 #3
I like this approach - although does it use more memory to declare these
forms
Public? Also, I have never used Modules? Where and how do you use them?
Is
there a tutorial somewhere on the web?

Thanx,
--
Anil Gupte
www.keeninc.net
www.icinema.com

"Charlie" <cfarrier at charlesfarriersoftware.comwrote in message
news:AA**********************************@microsof t.com...
Create a module with Public object variables that are named for your
forms.

Module1
Public Form1 as Form
public Form2 as Form
End Module

As you instantiate each form, assign the module object variable for that
form accordingly. You then have a reference to each form throughout your
application.

Sep 5 '07 #4
I figured out how to do it thanx to your pointers, but it seems like quite a
hack. I thought some thing like this would work:

Public Class FormContainer
Inherits System.Windows.Forms.Form
Dim frmStart As New FormStart
Dim frmMain As New FormMain
Public frmSliceInfo As New FormSliceInfo

i.e. make the form a Public object.
--
Anil Gupte
www.keeninc.net
www.icinema.com

"Cor Ligthert [MVP]" <no************@planet.nlwrote in message
news:eU****************@TK2MSFTNGP03.phx.gbl...
Anil,

Like controls are in a mdi forms all mdi forms in a collection in your
Parent form, you can just go through it to find the right one.

http://msdn2.microsoft.com/en-us/lib...en(vs.71).aspx

Cor
"Anil Gupte" <an*******@icinema.comschreef in bericht
news:%2****************@TK2MSFTNGP05.phx.gbl...
>>I have a MDI Parent Child set of forms
FormContainer --MDIParent
FormStart --MDIChild
FormMain-->MDIChild
FormSliceInfo-->MDIChild

I use the following in the beginning of FomrContainer

Public Class FormContainer
Inherits System.Windows.Forms.Form
Dim frmStart As New FormStart
Dim frmMain As New FormMain
Dim frmSliceInfo As New FormSliceInfo

and so on.

Now when I am in the frmMain, I have a button that I want to use, to
access frmSliceInfo. How do I do that? I am able to access it from the
Main Menu, because it is under the FormContainer, but not from frmMain.
In frmMain, I tried Me.MDIParent.frmSliceInfo but that did not work.

Thanx for your help.
--
Anil Gupte
www.keeninc.net
www.icinema.com


Sep 5 '07 #5
To add a module right click on the project name in the Solution Explorer,
then click Add Module. A module is lot like a class except it cannot be
instantiated. The object variables that you create do not take up much
memory. They merely act as pointers to your object.

In Module1 you should declare, but not instantiate your form object variables

Public F2 as Form2

I am still in the stone age working in Framework 1.0, so the following code
may be antiquated or even obsolete for 2.0 users...

but I tested this code and it works for me...

It would go in a form from where you want to open Form2, and where you have
a button called Button1.

'************

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click

If Not IsNothing(Module1.F2) AndAlso Module1.F2.Visible = False Then
'This applies after form has been closed
Module1.F2 = Nothing '(F2 does not test as nothing after being
closed.)
Module1.F2 = New Form2()
Module1.F2.Show()
ElseIf IsNothing(Module1.F2) Then 'This applies first time form is
opened
Module1.F2 = New Form2()
Module1.F2.Show()
Else 'This applies if form is visible and user clicks the button on
Form1 again
Module1.F2.BringToFront()
End If

End Sub

'*****************

You don't have to put Form2 in a module. You could declare an object
variable as Form2 wherever you wanted to use it. The module in the code is
just acting as a handy repository.

You could name the instance of Form2 in Module1 as Form2 instead of F2, if
you like.

You could carry this over to a menu item (instead of the button) on your
MDI, and it would be accessible to any open form in the MDI form.

Sep 5 '07 #6
Also, the code I provided prevents users from opening multiple instances of
the form class. You could modify the code to allow multiple instances.
Sometimes it's a good idea to allow multiple instances, such as when a form
is used for a database search, and the user may want more than one result
available at the same time.

Sep 5 '07 #7
OK, cool I think this will work. Especially because I want to keep the form
active (i.e. it should not lose the information in it's textboxes) even
after I
switch to another form. Otherwise multiple instances would not have the
previous info in them

Thanx a lot! I will try it today.
--
Anil Gupte
www.keeninc.net
www.icinema.com

"Charlie" <c2****@yahoo.comwrote in message
news:92**********************************@microsof t.com...
To add a module right click on the project name in the Solution Explorer,
then click Add Module. A module is lot like a class except it cannot be
instantiated. The object variables that you create do not take up much
memory. They merely act as pointers to your object.

In Module1 you should declare, but not instantiate your form object
variables

Public F2 as Form2

I am still in the stone age working in Framework 1.0, so the following
code
may be antiquated or even obsolete for 2.0 users...

but I tested this code and it works for me...

It would go in a form from where you want to open Form2, and where you
have
a button called Button1.

'************

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click

If Not IsNothing(Module1.F2) AndAlso Module1.F2.Visible = False
Then
'This applies after form has been closed
Module1.F2 = Nothing '(F2 does not test as nothing after being
closed.)
Module1.F2 = New Form2()
Module1.F2.Show()
ElseIf IsNothing(Module1.F2) Then 'This applies first time form is
opened
Module1.F2 = New Form2()
Module1.F2.Show()
Else 'This applies if form is visible and user clicks the button on
Form1 again
Module1.F2.BringToFront()
End If

End Sub

'*****************

You don't have to put Form2 in a module. You could declare an object
variable as Form2 wherever you wanted to use it. The module in the code
is
just acting as a handy repository.

You could name the instance of Form2 in Module1 as Form2 instead of F2, if
you like.

You could carry this over to a menu item (instead of the button) on your
MDI, and it would be accessible to any open form in the MDI form.

Sep 6 '07 #8
It works, it's great. You are a cool cat! :-)

--
Anil Gupte
www.keeninc.net
www.icinema.com

"Charlie" <c2****@yahoo.comwrote in message
news:1E**********************************@microsof t.com...
Also, the code I provided prevents users from opening multiple instances
of
the form class. You could modify the code to allow multiple instances.
Sometimes it's a good idea to allow multiple instances, such as when a
form
is used for a database search, and the user may want more than one result
available at the same time.

Sep 7 '07 #9
OK, unfortunately I have a problem.

As I said this works, but now the form2 is not recognized as an mdichild of
the container form. I tried to instantiate it in the conainer load event.
But that gives me some wierd behavior. What happens is that when I call
form 2 from form1, as soon as I complete some task in form 2 it returns to
form1 without asking. Here is the code in FormContainer:
Private Sub FormContainer_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
' ***********This is your code
If Not IsNothing(L3GlobalModule.frmSliceInfo) AndAlso
L3GlobalModule.frmSliceInfo.Visible = False Then 'This applies after form
has been closed
L3GlobalModule.frmSliceInfo = Nothing '(frmSliceInfo does not test
as nothing after being closed)
L3GlobalModule.frmSliceInfo = New FormSliceInfo
L3GlobalModule.frmSliceInfo.Show()
ElseIf IsNothing(L3GlobalModule.frmSliceInfo) Then 'This applies first
time form is opened
L3GlobalModule.frmSliceInfo = New FormSliceInfo
L3GlobalModule.frmSliceInfo.Show()
Else 'This applies if form is visible and user clicks the button on
Form1 again
L3GlobalModule.frmSliceInfo.BringToFront()
L3GlobalModule.frmSliceInfo.WindowState = FormWindowState.Maximized
End If
' ***********This is your code
L3GlobalModule.frmSliceInfo.MdiParent = Me
L3GlobalModule.frmSliceInfo.Location = Me.Location
L3GlobalModule.frmSliceInfo.Size = Me.Size
L3GlobalModule.frmSliceInfo.Dock = DockStyle.Fill

frmMain.MdiParent = Me
frmMain.Location = Me.Location
frmMain.Size = Me.Size
frmMain.Dock = DockStyle.Fill
'************************
......
Now in FormMain, I have a button called AdvancedPrice:

Private Sub btnAdvancedPrice_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnAdvancedPrice.Click
' ***********This is your code
If Not IsNothing(L3GlobalModule.frmSliceInfo) AndAlso
L3GlobalModule.frmSliceInfo.Visible = False Then 'This applies after form
has been closed
L3GlobalModule.frmSliceInfo = Nothing '(frmSliceInfo does not test
as nothing after being closed)
L3GlobalModule.frmSliceInfo = New FormSliceInfo
L3GlobalModule.frmSliceInfo.Show()
ElseIf IsNothing(L3GlobalModule.frmSliceInfo) Then 'This applies first
time form is opened
L3GlobalModule.frmSliceInfo = New FormSliceInfo
L3GlobalModule.frmSliceInfo.Show()
Else 'This applies if form is visible and user clicks the button on
Form1 again
L3GlobalModule.frmSliceInfo.BringToFront()
L3GlobalModule.frmSliceInfo.WindowState = FormWindowState.Maximized
' ***********This is your code

In FormSliceInfo, I am having the user pick a text file, I then read it and
fill a multiline text box with it. As soon as I read the file it goes back
to FormMain. I stepped through it and saw that it was doing so as soon as
the textbox was filled.

What is going on? Please help, I am flummoxed!
Thanx,
--
Anil Gupte
www.keeninc.net
www.icinema.com

"Charlie" <c2****@yahoo.comwrote in message
news:92**********************************@microsof t.com...
To add a module right click on the project name in the Solution Explorer,
then click Add Module. A module is lot like a class except it cannot be
instantiated. The object variables that you create do not take up much
memory. They merely act as pointers to your object.

In Module1 you should declare, but not instantiate your form object
variables

Public F2 as Form2

I am still in the stone age working in Framework 1.0, so the following
code
may be antiquated or even obsolete for 2.0 users...

but I tested this code and it works for me...

It would go in a form from where you want to open Form2, and where you
have
a button called Button1.

'************

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click

If Not IsNothing(Module1.F2) AndAlso Module1.F2.Visible = False
Then
'This applies after form has been closed
Module1.F2 = Nothing '(F2 does not test as nothing after being
closed.)
Module1.F2 = New Form2()
Module1.F2.Show()
ElseIf IsNothing(Module1.F2) Then 'This applies first time form is
opened
Module1.F2 = New Form2()
Module1.F2.Show()
Else 'This applies if form is visible and user clicks the button on
Form1 again
Module1.F2.BringToFront()
End If

End Sub

'*****************

You don't have to put Form2 in a module. You could declare an object
variable as Form2 wherever you wanted to use it. The module in the code
is
just acting as a handy repository.

You could name the instance of Form2 in Module1 as Form2 instead of F2, if
you like.

You could carry this over to a menu item (instead of the button) on your
MDI, and it would be accessible to any open form in the MDI form.

Sep 7 '07 #10

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

3
by: Peter Rohleder | last post by:
Hi, I'm using a style-sheet where I make use of the XPATH-"following-sibling"-expression. The part which makes problems looks similar to the following code: --------------------------- ...
2
by: Ferd Biffle | last post by:
Hello! I have an Excel XML feed from an Enterprise PDM system that is basically a flat text file with XML tags: <?xml version="1.0" encoding="UTF-8"?> <Import> <Row> <ID>1</ID>...
8
by: Frances Del Rio | last post by:
I'm getting Getting "Access is Denied" on resizeTo and moveTo methods in IE (IE 6.0..) I saw two posts about this from 7/6 & 7/7.. I suspect, like previous poster said, that this has to do w/MS...
25
by: Lyn | last post by:
Hi, I am working on a genealogy form. The only table (so far) lists everybody in the family, one record per person. Each record has an autonum ID. The parent form (frmMainForm) displays the...
11
by: localpricemaps | last post by:
i have some html which looks like this where i want to scrape out the href stuff (the www.cnn.com part) <div class="noFood">Cheese</div> <div class="food">Blue</div> <a class="btn" href =...
1
by: Sion Arrowsmith | last post by:
I have a module which needs to know what directory it's in, and to refer to files in a sibling directory, something like App/src/foo.py wants to read App/data/conf.xml . But I have no idea in what...
6
NeoPa
by: NeoPa | last post by:
Introduction The first thing to understand about Sub-Forms is that, to add a form onto another form takes a special Subform control. This Subform control acts as a container for the form that you...
4
by: Debbiedo | last post by:
My software program outputs an XML Driving Directions file that I need to input into an Access table (although if need be I can import a dbf or xls) so that I can relate one of the fields...
3
by: apurvaG | last post by:
Hi All, I am facing a problem while fetching a preceding sibling with some specific name from current node. Following is the sample XML which I am using <Root> <document> ...
0
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
0
by: Vimpel783 | last post by:
Hello! Guys, I found this code on the Internet, but I need to modify it a little. It works well, the problem is this: Data is sent from only one cell, in this case B5, but it is necessary that data...
0
by: jfyes | last post by:
As a hardware engineer, after seeing that CEIWEI recently released a new tool for Modbus RTU Over TCP/UDP filtering and monitoring, I actively went to its official website to take a look. It turned...
0
by: ArrayDB | last post by:
The error message I've encountered is; ERROR:root:Error generating model response: exception: access violation writing 0x0000000000005140, which seems to be indicative of an access violation...
1
by: PapaRatzi | last post by:
Hello, I am teaching myself MS Access forms design and Visual Basic. I've created a table to capture a list of Top 30 singles and forms to capture new entries. The final step is a form (unbound)...
1
by: Defcon1945 | last post by:
I'm trying to learn Python using Pycharm but import shutil doesn't work
0
by: af34tf | last post by:
Hi Guys, I have a domain whose name is BytesLimited.com, and I want to sell it. Does anyone know about platforms that allow me to list my domain in auction for free. Thank you
0
by: Faith0G | last post by:
I am starting a new it consulting business and it's been a while since I setup a new website. Is wordpress still the best web based software for hosting a 5 page website? The webpages will be...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 3 Apr 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome former...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.