How to change label text from a calling function

I have a form that calls a routine (located in the general module.vb) and this routine suppose to change the label text that reside on the form.  I'm passing as one of the arguments of the routine, the calling form .  I don't know why, but an error is generated.  When I specify the passing argument to be of type form, the error generated is "Label1 is not a memeber of System.Windows.Forms.Form".  When I then change the argument type to be of type object, nothing is returned.

Can someone please tell me what I am doing wrong?  Thank you.

[within the calling FORM]

Call qtrByMth(frmProvider.cbxPeriod.Text.Substring(0, 2), Me)



[the function]

Public Sub qtrByMth(ByVal sQtr As String, ByVal objForm As Object)

Select Case sQtr

Case "Q3"
                objForm.Label1.Text = "July"
                objForm.Label4.Text = "July"
                CType(objForm.Controls.Find("Label1", True)(0), Label).Text = "January"

                objForm.Label2.Text = "August"
                objForm.Label5.Text = "August"

                objForm.Label3.Text = "September"
                objForm.Label6.Text = "September"

end select
Maria TorresData AnalystAsked:
Who is Participating?
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
There is another option.  If you need to update the same things on each form then create an Interface that all the forms Implement.  Then you pass a generic Form reference but Cast to the Interface Type to make each Form update the correct elements.

For example, here's a partial Interface:
*I assume the complete one would have 12 Labels?
Public Interface Labels
    ReadOnly Property Lbl1 As Label
    ReadOnly Property Lbl2 As Label
    ReadOnly Property Lbl3 As Label
    ReadOnly Property Lbl4 As Label
    ReadOnly Property Lbl5 As Label
    ReadOnly Property Lbl6 As Label
End Interface

Open in new window


Then, here's Form1 implementing the Interface.  It simply returns the appropriate Label that corresponds to each Label Property:
Public Class Form1
    Implements Labels

    Public ReadOnly Property Lbl11 As System.Windows.Forms.Label Implements Labels.Lbl1
        Get
            Return Me.Label1
        End Get
    End Property

    Public ReadOnly Property Lbl2 As System.Windows.Forms.Label Implements Labels.Lbl2
        Get
            Return Me.Label2
        End Get
    End Property

    Public ReadOnly Property Lbl3 As System.Windows.Forms.Label Implements Labels.Lbl3
        Get
            Return Me.Label3
        End Get
    End Property

    Public ReadOnly Property Lbl4 As System.Windows.Forms.Label Implements Labels.Lbl4
        Get
            Return Me.Label4
        End Get
    End Property

    Public ReadOnly Property Lbl5 As System.Windows.Forms.Label Implements Labels.Lbl5
        Get
            Return Me.Label5
        End Get
    End Property

    Public ReadOnly Property Lbl6 As System.Windows.Forms.Label Implements Labels.Lbl6
        Get
            Return Me.Label6
        End Get
    End Property

End Class

Open in new window

So each different type of Form would need to do the above; Implement the Interface to return the appropriate Labels.

Finally, over in the Module, we change the type of the parameter passed to the Interface type:
Module Module1

    Public Sub qtrByMth(ByVal sQtr As String, ByVal lblForm As Labels)
        Select Case sQtr

            Case "Q3"
                lblForm.Lbl1.Text = "July"
                lblForm.Lbl4.Text = "July"

                lblForm.Lbl2.Text = "August"
                lblForm.Lbl5.Text = "August"

                lblForm.Lbl3.Text = "September"
                lblForm.Lbl6.Text = "September"

        End Select
    End Sub

End Module

Open in new window

0
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
A Form is just a blank Form...nothing more.  Form1, or Form2, though is a specific type of Form that will have anything that you added to it.

Either change Form to the name of your desired Form (Form1, Form2, etc...), or actually search the generic form instance for the control  with a matching name that you are looking for.  You could also Cast the generic Form instance to a specific type and access the controls that way.

It's not clear to me which approach is best for your situation.

If you only need this function to work with ONE specific type of Form then simply change Form to the specific Form name.
0
 
Maria TorresData AnalystAuthor Commented:
The routine will be used by more than one Form.  Therefore, I need to be able to pass the form to the routine so that I can update several of the labels.  I tried passing the form's name as one of the parameters to the routine, but I still was unable to change the labels' text.

Still not clear at what I am doing wrong.  Any help is greatly appreciated.

(Note:  I'm using Framework NET version 1.1)
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.