thefunnydad
asked on
setting property on a form from a class
I've searched the archive here, but stil am a little confused. I uderstand the concept of OO to some degree, but isn't "text" a property of a label? I have a form that is currently open and active. I drop into a class to do some work, but want to update the status of the work in a label on the form. Shouldn't I just be able to set the property of label.text on the form to what I want without all that other code? It looks like a lot of work to simply set a property.
In short, my question is how to set the text property of a label on an active form with a value, from within another class, without 25 lines of code. For the purists of you out there, I realize the old method may not have been true OO, but darn if it wasn't simple.
In short, my question is how to set the text property of a label on an active form with a value, from within another class, without 25 lines of code. For the purists of you out there, I realize the old method may not have been true OO, but darn if it wasn't simple.
ASKER
Well, that seems to be where I am in new territory; how to set the instance properly. I have tried the ways I am familiar with, but I always have to end up declaring it as "new" and I don't need a new instance, I need to reference the one already created. Could you throw me the bone on that then; how to set an instance to a form/class already active?
Thanks.
Thanks.
Look at this (it doesn't take 25 lines) just 2
https://www.experts-exchange.com/questions/20921303/Manipulating-objects-on-a-form-through-a-module-This-form-isn't-the-one-calling-the-module.html?query=open+form&searchType=topic
https://www.experts-exchange.com/questions/20921303/Manipulating-objects-on-a-form-through-a-module-This-form-isn't-the-one-calling-the-module.html?query=open+form&searchType=topic
Hi,
try this
in class say Class1
Public Class Class1
Dim parent As Form1
Public Sub New(ByRef frm As Form1)
parent = frm
MyMethod()
End Sub
Public Sub MyMethod()
parent.Label1.Text = "MyText"
End Sub
End Class
in form1 (say in a button click event) use
Dim cls As Class1
cls = New Class1(Me)
I Hope that this helps you.
Regards,
Venki
try this
in class say Class1
Public Class Class1
Dim parent As Form1
Public Sub New(ByRef frm As Form1)
parent = frm
MyMethod()
End Sub
Public Sub MyMethod()
parent.Label1.Text = "MyText"
End Sub
End Class
in form1 (say in a button click event) use
Dim cls As Class1
cls = New Class1(Me)
I Hope that this helps you.
Regards,
Venki
ASKER
Color me stupid; based upon the link here is what I did:
I added the following the the start-up form load event:
MainForm = Me
Then in the top of the class, I Added:
Public MainForm as {start-up form}
In the procedure, I added:
MainForm = New {start-up form}
finally, I tried:
MainForm.Label.text = "abc"
Doesn't show on the form.
Can I make something so easy hard or what?
I added the following the the start-up form load event:
MainForm = Me
Then in the top of the class, I Added:
Public MainForm as {start-up form}
In the procedure, I added:
MainForm = New {start-up form}
finally, I tried:
MainForm.Label.text = "abc"
Doesn't show on the form.
Can I make something so easy hard or what?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
OK, I was able to get it to work, but blending what you gave me with what I had. What I ended up doing was this
I was calling a function in the class from within the form, so I added ByRef frm As Form1 to the list of incoming params expected in the function, then when I made the call, passed me. This did it wthout having to set any other references in the class.
Form1
Public Sub Button1_click
class1.RunReport(param,par am,me)
end sub
Class1
Public Function RunReport (Byval param as string, ByVal param as string, byRef MainForm as Form1) as boolean
MainForm1.label.text = "abc"
RunReport = True
end function
I was calling a function in the class from within the form, so I added ByRef frm As Form1 to the list of incoming params expected in the function, then when I made the call, passed me. This did it wthout having to set any other references in the class.
Form1
Public Sub Button1_click
class1.RunReport(param,par
end sub
Class1
Public Function RunReport (Byval param as string, ByVal param as string, byRef MainForm as Form1) as boolean
MainForm1.label.text = "abc"
RunReport = True
end function
The difference between VB and VB.NET is that VB was implicitly creating a form object for you...
You really had a "form1" Object which was an instance of the "Form1" Class... Thats what allowed you to use
Form1.lable1.caption = "Hello World"
(this was basically cheating)
Now in VB.NET you have a "scope" for every variable... This includes your forms, your classes and everything.
So basically your "class" only knows whats below it or which objects are explicitly made known.
In your example try
MainForm.Label.text = "abc"
MainForm.show
This should most likely pop up a 2nd Form which is another instance of your Startup form. In reality you made a new form which is (still) invisible and needs to be shown
You really had a "form1" Object which was an instance of the "Form1" Class... Thats what allowed you to use
Form1.lable1.caption = "Hello World"
(this was basically cheating)
Now in VB.NET you have a "scope" for every variable... This includes your forms, your classes and everything.
So basically your "class" only knows whats below it or which objects are explicitly made known.
In your example try
MainForm.Label.text = "abc"
MainForm.show
This should most likely pop up a 2nd Form which is another instance of your Startup form. In reality you made a new form which is (still) invisible and needs to be shown
ASKER
And to make it ALL moot; the function I wss calling from within the class was work to be done as a result of a click on the main form. SO, set the text property for the label on the form to "abc" BEFORE calling the class, then reset it to "whatever" when you return and the work is complete. {sigh} sometimes the freakin trees get in the way.
Thanks all
Thanks all
if you have an instance of the form in the class then you can just set the text property like
forminstance.Label1.Text = "some value"
hope that this helps you.
Regards,
Venki