Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

How to change label text from a calling function

Posted on 2013-06-10
3
Medium Priority
?
335 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 86

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 86

Accepted Solution

by:
Mike Tomlinson earned 2000 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

Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

Question has a verified solution.

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

Article by: Kraeven
Introduction Remote Share is a simple remote sharing tool, enabling you to see, add and remove remote or local shares. The application is written in VB.NET targeting the .NET framework 2.0. The source code and the compiled programs have been in…
Creating an analog clock UserControl seems fairly straight forward.  It is, after all, essentially just a circle with several lines in it!  Two common approaches for rendering an analog clock typically involve either manually calculating points with…
In response to a need for security and privacy, and to continue fostering an environment members can turn to for support, solutions, and education, Experts Exchange has created anonymous question capabilities. This new feature is available to our Pr…
We’ve all felt that sense of false security before—locking down external access to a database or component and feeling like we’ve done all we need to do to secure company data. But that feeling is fleeting. Attacks these days can happen in many w…

927 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