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

CType(Me.ParentForm, Form1).control1.Text = "Title bar text"

i have two forms

Form1 and Form2

Form1 has a panel. It loads form2

Form2 has code like this


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

'Title of Control1
CType(Me.ParentForm, Form1).control1.Text = "Title bar text"

End Sub

Open in new window


Needless to say this works fine

Here comes the problem:
I added a new form: Form3
also with a panel with Form2 inside

now i have a problem with this CType(Me.ParentForm, Form1).control1.Text


I would also like to have this fixed to accept any future parent form, instead of writing something like

if parentform.name = "form1" then
    CType(Me.ParentForm, Form1).control1.Text = "bla1"
else if parentform.name = "form2" then
   CType(Me.ParentForm, Form2).control1.Text = "bla bla2"
else if .....to infiniti
    CType(Me.ParentForm, FormInfini).control1.Text  = "blablablafiniti"
end if



please help
0
Ess Kay
Asked:
Ess Kay
  • 4
  • 4
1 Solution
 
käµfm³d 👽Commented:
Create a new interface definition which both child forms will implement. This interface will provide a way to access the control1.Text.

Public Interface IControl1
    Property Control1Text() As String
End Interface

Open in new window


Then implement that interface on both forms:

Public Class Form2 : Form
    Implements IControl1

    '  Original code

    Public Property Control1Text() As String
        Get
            Return Me.control1.Text
        End Get
        Set
            Me.control1.Text = value
        End Set
    End Property

End Class

Public Class Form3 : Form
    Implements IControl1

    '  Original code

    Public Property Control1Text() As String
        Get
            Return Me.control1.Text
        End Get
        Set
            Me.control1.Text = value
        End Set
    End Property

End Class

Open in new window


Finally, cast to the interface type:

Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
    'Title of Control1
    CType(Me.ParentForm, IControl1).Control1Text = "Title bar text"
End Sub

Open in new window

0
 
Angelp1ayCommented:
You might as well swap the CType for a DirectCast too. For reference types they are functionally identical and DirectCast is marginally more performant. It will make minimal difference in this case but it's a good habit to get into.
0
 
Ess KayEntrapenuerAuthor Commented:
@kaufmed, that was just an example. the real Form2 has over two thousand lines and tons of controls ( grids, textboxes, labels, trees, you name it)

I can't sit there and recreate all controls, nor the form itself



i need something to return the parentForm


Like the If statement, but dynamiccally
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.

 
käµfm³d 👽Commented:
You might try:

Dim c() As Control = Me.ParentForm.Controls.FindControl("control1", True)

If c IsNot Nothing AndAlso c.Length > 0 Then
    c(0).Text = "bla bla2"
End If

Open in new window

0
 
Ess KayEntrapenuerAuthor Commented:
How will that return the parentform
0
 
käµfm³d 👽Commented:
It won't, but based on your original code snippet you're after a control that resides on the parent form. That is what the above should do.
0
 
Ess KayEntrapenuerAuthor Commented:
the problem is that i have many differnt controls.

instead of this

if parentform.name = "form1" then
    CType(Me.ParentForm, Form1).control1.Text = "bla1"
else if parentform.name = "form2" then
   CType(Me.ParentForm, Form2).control1.Text = "bla bla2"
else if .....to infiniti
    CType(Me.ParentForm, FormInfini).control1.Text  = "blablablafiniti"
end if


i need to cast the parent form as an object
and replace the form1, form2 ...form3456...

so i can use something like

 CType(Me.ParentForm, FormObject).control1.Text
 CType(Me.ParentForm, FormObject).grid.datasource=  somesource
 CType(Me.ParentForm, FormObject).tree.node.remove(node(1))


and so on
0
 
käµfm³d 👽Commented:
What I am suggesting now will yield what you are after, but it will do so with just a tad more work. I showed you how to set the Text property. To do more involved controls like your Grid and your Tree, you will require an additional cast.

e.g.

Dim c() As Control = Me.ParentForm.Controls.FindControl("grid", True)

If c IsNot Nothing AndAlso c.Length > 0 Then
    Dim gv As DataGridView = TryCast(c, DataGridView)

    If gv IsNot Nothing Then
        gv.DataSource = somesource
    End If
End If

Open in new window


You won't get the simplicity that you show in bold because you are locating controls at runtime. If you were instead doing it at compile-time--like I demonstrated with the interface--then you could have more simplified syntax.
0
 
Ess KayEntrapenuerAuthor Commented:
Awesome, youre the man
0

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 4
  • 4
Tackle projects and never again get stuck behind a technical roadblock.
Join Now