Have a canvas, in fact have eight, that may or may not have a background image. Would like when a canvas is clicked for the focus ring to show for the select canvas and not for the others. Also be able to keep track of which is the selected one. The canvas or setup in a class.
[quote=201333:@Jim Smith]Have a canvas, in fact have eight, that may or may not have a background image. Would like when a canvas is clicked for the focus ring to show for the select canvas and not for the others. Also be able to keep track of which is the selected one. The canvas or setup in a class.
Help would be appreciated.[/quote]
Hi Jim!
Jim what I do is subclass a “canvas” and then add a property called “isClicked” to this canvas subclass. I will then we can mark true or false for a canvas clicked in the canvas’ cellClick event. (You will have to determine how you want to mark/unmark your IsClicked properties.)
Having an array that is of the subclassed “canvas” type allows me to add all of my subclassed canvas’ to it in order to have an index to search through. For example if I see that array element [2] has isClicked property=true then I would change the focus ring on only that array element index.
Turn on the AcceptFocus property of Canvas and they’ll automatically focus from Tab and Shift-Tabbing. But to focus on click you’ll have to manually set it
Function MouseDown(X As Integer, Y As Integer) As Boolean
me.SetFocus
End Function
To know what’s currently selected call the windows Focus method
dim c As Canvas = self.Focus
But if there are controls other than your Canvas’ that can have focus that will crash.
Instead group your Canvas’ in a Control Set or as a Canvas subclass type. Then you can add a method that returns the Canvas or nil if something else is selected…
[code]//MyCanvas is the Control Set name or subclass name
Function getFocusedCanvas() As MyCanvas
if self.Focus IsA MyCanvas then
return MyCanvas(self.Focus)
else
return nil
end
End Function
Sub Action()
dim c As MyCanvas = getFocusedCanvas
if c <> nil then
MsgBox "focused on " + Str(c.Index) //Index relevant only for Control Sets
else
MsgBox “not focused on a MyCanvas”
end