Solved

How to change label text from a calling function

Posted on 2013-06-10
3
313 Views
Last Modified: 2013-06-11
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
0
Comment
Question by:CarmenMTorres
  • 2
3 Comments
 
LVL 85

Expert Comment

by:Mike Tomlinson
ID: 39235763
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
 

Author Comment

by:CarmenMTorres
ID: 39237629
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
 
LVL 85

Accepted Solution

by:
Mike Tomlinson earned 500 total points
ID: 39237721
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

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Microsoft Reports are based on a report definition, which is an XML file that describes data and layout for the report, with a different extension. You can create a client-side report definition language (*.rdlc) file with Visual Studio, and build g…
Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
Internet Business Fax to Email Made Easy - With eFax Corporate (http://www.enterprise.efax.com), you'll receive a dedicated online fax number, which is used the same way as a typical analog fax number. You'll receive secure faxes in your email, fr…
Both in life and business – not all partnerships are created equal. As the demand for cloud services increases, so do the number of self-proclaimed cloud partners. Asking the right questions up front in the partnership, will enable both parties …

861 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now