• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 306
  • Last Modified:

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.
0
emi_sastra
Asked:
emi_sastra
  • 14
  • 6
  • 2
  • +1
2 Solutions
 
Imran Javed ZiaConsultant Software Engineer - .NET ArchitectCommented:
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.
0
 
Imran Javed ZiaConsultant Software Engineer - .NET ArchitectCommented:
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
0
 
emi_sastraAuthor Commented:
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.
0
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 
CodeCruiserCommented:
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)
0
 
emi_sastraAuthor Commented:
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.
0
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
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
0
 
emi_sastraAuthor Commented:
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.
0
 
emi_sastraAuthor Commented:
- 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.
0
 
emi_sastraAuthor Commented:
I use :

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

at mdi form.

Thank you.
0
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
You'd have to add Mode() to your Interface!
0
 
emi_sastraAuthor Commented:
- 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.
0
 
emi_sastraAuthor Commented:
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.
0
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
So you'd add a "Mode" Property to your Interface:

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

   Property Mode As Integer
    End Interface

Then, in your Form, make the Mode() Property Implement the Interface Property:

    Public Class Form3
        Implements MdiChildForm

        Private intMode As Int16 = ERV_GLOBAL.MB_VIEW

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

    End Class

Now you can cast "frm" like you did before to set Mode():

    DirectCast(frm, MdiChildForm).Add()  
    DirectCast(frm, MdiChildForm).Mode = Me.intMode
0
 
emi_sastraAuthor Commented:
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.
0
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
Right..."frm" is a generic Form, which has no knowledge of "clsFormAuthority".  Your MdiChildForm Interface also will not be able to access it.

So either you need to:
(1) Cast "frm" to a Type that does have knowledge of "clsFormAuthority".
(2) Add "clsFormAuthority" as a Property of MdiChildForm Intefrace (just like Mode).
0
 
emi_sastraAuthor Commented:
Ok. Let me try it.

Thank you.
0
 
emi_sastraAuthor Commented:
-(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.
0
 
emi_sastraAuthor Commented:
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.
0
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
0
 
emi_sastraAuthor Commented:
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.
0
 
emi_sastraAuthor Commented:
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.
0
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
...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

0
 
emi_sastraAuthor Commented:
Hi All,

Thank to all of you very much for your help.

Thanks to Idle Mind that helps a lot.
0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

  • 14
  • 6
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now