Hi. I have created a custom canvas class and was wondering whether there was a way to group some of my related methods into a module like structure within the class? So for instance, say I have a bunch of methods all related to MouseEvents, is there a way to create a module like structure called “MouseEvents” and place it in the “CustomCanvas” class and then call one of the events like this:
CustomCanvas.MouseEvents.HandleCustomAction(X, Y)
This would a) make the code structure easier to navigate and b) make it easier to port those specific group of functions to another class etc.
I do it by naming the methods with a common prefix: mouseDown, mouseUp, mouseMove …
that way all related methods of the class are grouped.
you cannot insert a folder but at the top level of the project.
If you’re trying to keep your class a little cleaner by semi-hiding lesser used methods, you could add them to a module and have them extend the custom class.
E.g. in a “CustomCanvas” folder add a “MouseEvents” module, then add your “HandleCustomAction” method to the new module utilising the “Extends” keyword…
Public Sub HandleCustomAction(Extends cc As CustomCanvas, X As Integer, Y As Integer)
MsgBox "Yay!"
End Sub
Then your CustomCanvas subclasses can use me.HandleCustomAction(X, Y).
Doesn’t give you the CustomCanvas.MouseEvents.HandleCustomAction(X, Y) that you wanted, but does get the method out of the main class.
You can of course add other modules to the “CustomCanvas” folder to cover other groups of extension methods to the CustomCanvas, and add the CustomCanvas itself to the folder too to keep everything nice and neat.
If you have methods that you’d like to use on all kinds of subclasses, you can use the Extends keyword with class names higher up the hierarchy, such as RectControl or even Object.
That’s a great idea, Ian. Thank you. I guess the only issue with that is that within the module that extends the class how do you refer to the class control? By that I mean that if the method is within the actual class you would say “self.property = 1” and “self.mymethod(value)” etc. But you can’t use “self” and you can’t use “cc” since it’s an extend and the CustomCanvas reference is not passed to it as a parameter.
By the way, this is totally not recommended as it’ll no doubt break stuff down the line, but because “Me” doesn’t mean anything in a Module, you can use it as the name of of the Extends param…
Public Sub HandleCustomAction(Extends Me As CustomCanvas, X As Integer, Y As Integer)
MsgBox Me.Name
End Sub
Pretty cool, but again, probably frowned upon by people that know better how the framework hangs together!