Merri
Oct 14th, 2005, 11:50 AM
You can make properties for the following things: Forms, UserControls and Class Modules. Basically any element that will behave as an object.
When to use properties?
Properties are handy when you want to generalize your code: if you're changing a setting of something, it might be better to create it as a property. Especially if you might have a need to get a return value as well. The property code can then do some additional stuff, such as switching form's menu items automatically to correct value, so you don't need to do it from whereever you set the property.
Property Get
Property Get is rather simple: it always returns a value.
' this could be in a usercontrol
Dim m_Caption As String
Public Property Get Caption() As String
Caption = m_Caption
End Property
After this you could call it like this from a form the usercontrol is placed on:
Me.Caption = UserControl1.Caption
You can also pass objects:
' again, in a usercontrol
Dim m_Picture As IPictureDisp
' reference to "Ole Automation" required! by default it is included
Public Property Get Picture() As IPictureDisp
Set Picture = m_Picture
End Property
In this case you would call it like this:
Set Me.Picture = UserControl.Picture
Property Let and Property Set
Property Let is used when you pass a variable. Set is used when you pass an object.
Dim m_Caption As String
Public Property Let Caption(ByVal NewCaption As String)
m_Caption = NewCaption
End Property
Usage:
UserControl1.Caption = "This is my control!"
Dim m_Picture As IPictureDisp
Public Property Set Caption(ByRef NewPicture As IPictureDisp)
Set m_Picture = NewPicture
End Property
Usage:
Set UserControl1.Picture = Picture1.Picture
Some notes about the examples
I kept the examples as clean as possible. For this reason, I didn't include additional coding that would redraw the usercontrol for example. Redrawing would be placed in the property handling as otherwise your control would never change. It is a good idea to make a general redrawing procedure within your usercontrol to keep it visually updated with ease.
The same applies for forms and class modules, though class modules aren't visible. You could use class modules with events though, so when a property gets changed, an event would fire:
' in a form
Dim WithEvents MyClass As clsMyClass
This, however, is out of our topic.
Adding it all up
- use a property instead of a sub or function if you need to also get the value
- use a sub if you just need to set something
- use a function if you need to set something and require a return value of the result (such as if the function succeeded)
- Property Get works with any data, be it a regular variable or an object
- Property Let is for regular variables
- Property Set is for objects
Comments and feedback
Send these via a private message; the replies in the FAQ forum can only contain new information regarding the subject. So any questions, thank yous etc. via a pm :)
When to use properties?
Properties are handy when you want to generalize your code: if you're changing a setting of something, it might be better to create it as a property. Especially if you might have a need to get a return value as well. The property code can then do some additional stuff, such as switching form's menu items automatically to correct value, so you don't need to do it from whereever you set the property.
Property Get
Property Get is rather simple: it always returns a value.
' this could be in a usercontrol
Dim m_Caption As String
Public Property Get Caption() As String
Caption = m_Caption
End Property
After this you could call it like this from a form the usercontrol is placed on:
Me.Caption = UserControl1.Caption
You can also pass objects:
' again, in a usercontrol
Dim m_Picture As IPictureDisp
' reference to "Ole Automation" required! by default it is included
Public Property Get Picture() As IPictureDisp
Set Picture = m_Picture
End Property
In this case you would call it like this:
Set Me.Picture = UserControl.Picture
Property Let and Property Set
Property Let is used when you pass a variable. Set is used when you pass an object.
Dim m_Caption As String
Public Property Let Caption(ByVal NewCaption As String)
m_Caption = NewCaption
End Property
Usage:
UserControl1.Caption = "This is my control!"
Dim m_Picture As IPictureDisp
Public Property Set Caption(ByRef NewPicture As IPictureDisp)
Set m_Picture = NewPicture
End Property
Usage:
Set UserControl1.Picture = Picture1.Picture
Some notes about the examples
I kept the examples as clean as possible. For this reason, I didn't include additional coding that would redraw the usercontrol for example. Redrawing would be placed in the property handling as otherwise your control would never change. It is a good idea to make a general redrawing procedure within your usercontrol to keep it visually updated with ease.
The same applies for forms and class modules, though class modules aren't visible. You could use class modules with events though, so when a property gets changed, an event would fire:
' in a form
Dim WithEvents MyClass As clsMyClass
This, however, is out of our topic.
Adding it all up
- use a property instead of a sub or function if you need to also get the value
- use a sub if you just need to set something
- use a function if you need to set something and require a return value of the result (such as if the function succeeded)
- Property Get works with any data, be it a regular variable or an object
- Property Let is for regular variables
- Property Set is for objects
Comments and feedback
Send these via a private message; the replies in the FAQ forum can only contain new information regarding the subject. So any questions, thank yous etc. via a pm :)