VB6 Style "Default Property"?

  1. 3 months ago

    Wes W

    Jan 10 Pre-Release Testers, Xojo Pro MD, Columbia USA

    Visual Basic 6 had the notion of a "default property" for controls and classes. Microsoft defined them this way:

    "A default property is a class or structure property that your code can access without specifying it. When calling code names a class or structure but not a property, and the context allows access to a property, Visual Basic resolves the access to that class or structure's default property if one exists."

    For instance, you could assign a label's caption property like this:

    lbl.Caption = "SomeCaptionText"

    or you could do:

    lbl = "SomeCaptionText"

    This was pretty handy. I've noticed that in Xojo I always have to use the longer syntax:

    obj.property = something

    Is there a way in Xojo to use the shorter syntax:

    obj = something

    If you have a class that is designed to allow "Operator_xxx" overloading, can you also provide a way to assign and retrieve a value directly to the object rather than having to specify obj.Value = x and x = obj.Value?

    As Jason said, Xojo does not have this concept of a "default property" for controls like VB did.

    However, you can simulate it in your own classes by using Operator Overloading. So you could create a Person class and be able to assign a value to its FullName property like this:

    Dim p As New Person
    p = "Luke Skywalker"

    To get the above to work, the Person class needs a FullName As String property and an Operator_Convert method.

    Public Sub Operator_Convert(value As String)
      Self.FullName = value
    End Sub
  2. Jason P

    Jan 10 Xojo Inc Texas

    This does not exist in the built in Xojo classes.

  3. Paul L

    Jan 10 Xojo Inc Answer http://docs.xojo.com

    As Jason said, Xojo does not have this concept of a "default property" for controls like VB did.

    However, you can simulate it in your own classes by using Operator Overloading. So you could create a Person class and be able to assign a value to its FullName property like this:

    Dim p As New Person
    p = "Luke Skywalker"

    To get the above to work, the Person class needs a FullName As String property and an Operator_Convert method.

    Public Sub Operator_Convert(value As String)
      Self.FullName = value
    End Sub
  4. Wes W

    Jan 10 Pre-Release Testers, Xojo Pro MD, Columbia USA

    @Paul L As Jason said, Xojo does not have this concept of a "default property" for controls like VB did.

    However, you can simulate it in your own classes by using Operator Overloading. So you could create a Person class and be able to assign a value to its FullName property like this:

    Dim p As New Person
    p = "Luke Skywalker"

    To get the above to work, the Person class needs a FullName As String property and an Operator_Convert method.
    Public Sub Operator_Convert(value As String) Self.FullName = value End Sub

    Thanks Paul!, That's really cool! I just tried it and it works great. I looked at all of the "Operator_xxx" items and assumed I would find one like "Operator_Assign" to get the job done. "Operator_Convert" didn't grab my attention at all.

    Xojo is pretty friggin cool.

    Thanks again.

  5. Wes W

    Jan 10 Pre-Release Testers, Xojo Pro MD, Columbia USA

    Paul,

    It would be awesome if you could do a webinar on operator overloading. Some of the operator overloads look interesting but I'm not clear when you might want to use them.

    Clarification of these in particular would be great: Operator_Subscript, Operator_Redim and all of the Operator_xxxRight varieties.

  6. Paul L

    Jan 10 Xojo Inc http://docs.xojo.com

    I did a webinar that covered operator overloading last summer:
    Cool Xojo Language Features

    A couple example projects are here:
    Examples/Language Features/OperatorLookup
    Examples/Language Features/OperatorOverload

    I wouldn't go crazy trying to use every Operator_* method or you may end up with some ugly code. I find Operator_Lookup, Operator_Convert and Operator_Compare are most useful. The others are more special purpose.

or Sign Up to reply!