Avatar of emi_sastra
emi_sastra
 asked on

ACCESS MDICHILD VARIABLES OR PROPERTIES

Hi All,

I create a mdi parent and several mdi child forms.
I want to access mdi child form variables and properties.

Public Class Form3
    Implements MdiChildForm

    Private clsFormAuthority As clsFormAuthority

    Public Sub New(ByVal clsFormAuthority As clsFormAuthority)

        Me.InitializeComponent()

        Me.clsFormAuthority = clsFormAuthority

    End Sub

    Private intMode As Int16 = ERV_GLOBAL.MB_VIEW

    Public Property Mode() As Integer
        Get
            Return intMode
        End Get
        Set(ByVal value As Integer)
            intMode = value
        End Set
    End Property

End Sub

How could I access :

1. clsFormAuthority
2. Mode Properties

Thank you.
Visual Basic.NET

Avatar of undefined
Last Comment
emi_sastra

8/22/2022 - Mon
Imran Javed Zia

Make both of clsFormAuthority and Mode public.
and the cast your reference to form like ActiveChild in Form3 and then you can access the required data member directly.
Imran Javed Zia

You can also do this ass following
Dim child As Form3= Me.ActiveMDIChild

child.clsFormAuthority = *****
child.Mode  = *****

for more reference please follow the urls:
http://msdn.microsoft.com/en-us/library/system.windows.forms.form.activemdichild.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-2
http://p2p.wrox.com/vb-net-2002-2003-basics/56165-controlling-mdi-child-form-mdi-parent-panel.html
emi_sastra

ASKER
Please my code.

  If ERV_GLOBAL.Form_Active("Form3", Me) Then
            Dim frm As Form = Me.ActiveMdiChild

           
            Me.ShowHideControl(intMode, clsFormAuthority)
        Else
            If clsFormAuthority.blnAccess Then
                Dim Form3 As New Form3(clsFormAuthority)
                Form3.MdiParent = Me
                Form3.Show()
            End If
        End If

What should I do ?

Thank you.
All of life is about relationships, and EE has made a viirtual community a real community. It lifts everyone's boat
William Peck
Nasir Razzaq

Change this line

Dim frm As Form = Me.ActiveMdiChild

to

Dim frm As Form3 = Me.ActiveMdiChild

I suppose this

Me.ShowHideControl(intMode, clsFormAuthority)

would be

Me.ShowHideControl(frm.intMode, frm.clsFormAuthority)
emi_sastra

ASKER
Hi CodeCruiser,

I've got compile error :

Error      1      'WindowsApplication1.Form3.intMode' is not accessible in this context because it is 'Private'.       
Error      2      'WindowsApplication1.Form3.clsFormAuthority' is not accessible in this context because it is 'Private'.       

Thank you.
Mike Tomlinson

Use "Mode" instead of "intMode".

For "clsFormAuthority", you'd need to change the access modifier to public.  *This has already been mentioned!*

Change:

    Private clsFormAuthority As clsFormAuthority

To:

    Public clsFormAuthority As clsFormAuthority
⚡ FREE TRIAL OFFER
Try out a week of full access for free.
Find out why thousands trust the EE community with their toughest problems.
emi_sastra

ASKER
Could access to its property ?

 Public Property Mode() As Integer
        Get
            Return intMode
        End Get
        Set(ByVal value As Integer)
            intMode = value
        End Set
    End Property

Thank you.
emi_sastra

ASKER
- Use "Mode" instead of "intMode".
Get it.

One more problem.

 Private Sub btnCreate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
        Dim frm As Form = Me.ActiveMdiChild
        If Not IsNothing(frm) AndAlso TypeOf frm Is MdiChildForm Then
            DirectCast(frm, MdiChildForm).Add()
        End If
    End Sub

How could I change mode of active mdi child form ?
Remember there are several forms.

Thank you.
emi_sastra

ASKER
I use :

Public Interface MdiChildForm
    Sub Add()
    Sub Update()
    Sub Delete()
    Sub Save()
    Sub Print()
    Sub Cancel()
End Interface

at mdi form.

Thank you.
This is the best money I have ever spent. I cannot not tell you how many times these folks have saved my bacon. I learn so much from the contributors.
rwheeler23
Mike Tomlinson

You'd have to add Mode() to your Interface!
emi_sastra

ASKER
- You'd have to add Mode() to your Interface!
I don't get it.

 Private Sub btnCreate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click

        Me.intMode = ERV_GLOBAL.MB_ADD

        Dim frm As Form = Me.ActiveMdiChild
        If Not IsNothing(frm) AndAlso TypeOf frm Is MdiChildForm Then
            DirectCast(frm, MdiChildForm).Add()
         
mdichild.mode = me.intMode --> How to do this ?
        End If

      End Sub

How could I do it ?

Thank you.
emi_sastra

ASKER
Sorry,

  Private Sub btnCreate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click

        Me.intMode = ERV_GLOBAL.MB_ADD

        Dim frm As Form = Me.ActiveMdiChild
        If Not IsNothing(frm) AndAlso TypeOf frm Is MdiChildForm Then
            DirectCast(frm, MdiChildForm).Add()

--problem below code
            Me.ShowHideControl(intMode, frm.clsFormAuthority)
        End If
 
    End Sub


Thank you.
⚡ FREE TRIAL OFFER
Try out a week of full access for free.
Find out why thousands trust the EE community with their toughest problems.
ASKER CERTIFIED SOLUTION
Mike Tomlinson

THIS SOLUTION ONLY AVAILABLE TO MEMBERS.
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
See Pricing Options
Start Free Trial
GET A PERSONALIZED SOLUTION
Ask your own question & get feedback from real experts
Find out why thousands trust the EE community with their toughest problems.
emi_sastra

ASKER
Sorry Mode has no problem anymore since I have code at form3 below :

 Public Class Form3
       Implements MdiChildForm

    Public clsFormAuthority As clsFormAuthority
    Private intMode As Int16 = ERV_GLOBAL.MB_VIEW

    Public Sub New(ByVal clsFormAuthority As clsFormAuthority)

        Me.InitializeComponent()

        Me.clsFormAuthority = clsFormAuthority

    End Sub

    Public Property Mode() As Integer
        Get
            Return intMode
        End Get
        Set(ByVal value As Integer)
            intMode = value
        End Set
    End Property

  Public Sub Add() Implements MdiChildForm.Add
        Me.Mode = ERV_GLOBAL.MB_ADD
        MsgBox(Me.Name & " CREATE")
    End Sub

End Sub

The problem is to access clsFormAuthority at mdi parent.

 Private Sub btnCreate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click

        Me.intMode = ERV_GLOBAL.MB_ADD

        Dim frm As Form = Me.ActiveMdiChild
        If Not IsNothing(frm) AndAlso TypeOf frm Is MdiChildForm Then
            DirectCast(frm, MdiChildForm).Add()
            'Me.ShowHideControl(intMode, frm.clsFormAuthority)
        End If
 
    End Sub

frm.clsFormAuthority is the problem now.

Thank you.
SOLUTION
Mike Tomlinson

THIS SOLUTION ONLY AVAILABLE TO MEMBERS.
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
See Pricing Options
Start Free Trial
⚡ FREE TRIAL OFFER
Try out a week of full access for free.
Find out why thousands trust the EE community with their toughest problems.
emi_sastra

ASKER
Ok. Let me try it.

Thank you.
emi_sastra

ASKER
-(1) Cast "frm" to a Type that does have knowledge of "clsFormAuthority".
Have no idea about it.

- (2) Add "clsFormAuthority" as a Property of MdiChildForm Intefrace (just like Mode).
Let me try first.

Thank you.
Experts Exchange has (a) saved my job multiple times, (b) saved me hours, days, and even weeks of work, and often (c) makes me look like a superhero! This place is MAGIC!
Walt Forbes
emi_sastra

ASKER
Public Interface MdiChildForm
    Sub Add()
    Sub Update()
    Sub Delete()
    Sub Save()
    Sub Print()
    Sub Cancel()
    Sub FormAuthority()
End Interface

  Public Property FormAuthority() Implements MdiChildForm.FormAuthority
        Get
            Return clsFormAuthority
        End Get
        Set(ByVal value As Object)
            clsFormAuthority = value
        End Set
    End Property

Error      1      Class 'Form3' must implement 'Sub FormAuthority()' for interface 'MdiChildForm'.       

Error      2      'FormAuthority' cannot implement 'FormAuthority' because there is no matching property on interface 'MdiChildForm'.       

Thank you.
Mike Tomlinson

emi_sastra

ASKER
Public Interface MdiChildForm
    Sub Add()
    Sub Update()
    Sub Delete()
    Sub Save()
    Sub Print()
    Sub Cancel()
    Property FormAuthority()
End Interface

 Public Property FormAuthority() As Object Implements MdiChildForm.FormAuthority
        Get
            Return clsFormAuthority
        End Get
        Set(ByVal value As Object)
            clsFormAuthority = value
        End Set
    End Property

Then what should I do at main form ?

Thank you.
⚡ FREE TRIAL OFFER
Try out a week of full access for free.
Find out why thousands trust the EE community with their toughest problems.
emi_sastra

ASKER
I try this.

 Private Sub btnCreate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click

        Me.intMode = ERV_GLOBAL.MB_ADD

        Dim frm As Form = Me.ActiveMdiChild
        If Not IsNothing(frm) AndAlso TypeOf frm Is MdiChildForm Then
            DirectCast(frm, MdiChildForm).Add()
            clsFormAuthority = DirectCast(frm, MdiChildForm).FormAuthority
            Me.ShowHideControl(intMode, clsFormAuthority)
        End If
 
    End Sub

Thank you.
Mike Tomlinson

...and does that work now?

Instead of using DirectCast() each time, you can create a local variable to use:
Private Sub btnCreate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click

        Me.intMode = ERV_GLOBAL.MB_ADD

        Dim frm As Form = Me.ActiveMdiChild
        If Not IsNothing(frm) AndAlso TypeOf frm Is MdiChildForm Then
            Dim child As MdiChildForm = DirectCast(frm, MdiChildForm)
            ' ... now use "child" ...
            child.Add()
            Me.ShowHideControl(intMode, child.FormAuthority)
        End If
 
End Sub

Open in new window

emi_sastra

ASKER
Hi All,

Thank to all of you very much for your help.

Thanks to Idle Mind that helps a lot.
Experts Exchange is like having an extremely knowledgeable team sitting and waiting for your call. Couldn't do my job half as well as I do without it!
James Murphy