xsharp.eu • How to implement EditFocusChange in Winforms?
Page 1 of 2

How to implement EditFocusChange in Winforms?

Posted: Wed Sep 28, 2022 5:01 am
by ic2
The last few weeks I've been working with some Winforms VOXported from VO forms.

In VO we use EditFocusChange to set a class variable telling which control got focus.
I have not yet understood how this works in X# WInforms.

I tried adding an individual method for each control for which the program needs to be aware of when it gets focus:

Code: Select all

Method textBoxTo_GotFocus(sender As Object, e As EventArgs)
But I am not sure how to register the event handler (which I did in C# programs). I tried this in the constructor:

Code: Select all

Self:textBoxTo:GotFocus+=textBoxTo_GotFocus	
but then I get:

Error XS0407 'usual MyPrg.textBoxTo_GotFocus(object, System.EventArgs)' has the wrong return type

What should I do differently?

Or did I miss a Winforms equivalent of EditFocusChange ?

Dick

How to implement EditFocusChange in Winforms?

Posted: Wed Sep 28, 2022 5:42 am
by wriedmann
Hi Dick,
the C# documentation says this:

Code: Select all

private void Control1_GotFocus(Object sender, EventArgs e)
and traduced to X# it would be

Code: Select all

method Control1_GotFocus( sender as Object, e as EventArgs ) as void
So you are missing the return type "as void".
Personally, I would build my own control class inherited from the textbox class and add that method there, and eventually call a "EditFocusChange" method in the window itself.
Wolfgang
P.S. I don't know if VS helps in this, but XIDE optionally creates this method automatically

How to implement EditFocusChange in Winforms?

Posted: Wed Sep 28, 2022 5:48 am
by Chris
Hi Wolfgang,
wriedmann post=24036 userid=336 wrote: P.S. I don't know if VS helps in this, but XIDE optionally creates this method automatically
It does? How? Must have been another feature that I implemented and totally forgot about! :)

.

How to implement EditFocusChange in Winforms?

Posted: Wed Sep 28, 2022 5:53 am
by wriedmann
Hi Chris,
it does, and indeed it is very helpful!


Step1:
28-09-2022_07-51-22.png
28-09-2022_07-51-22.png (7.88 KiB) Viewed 740 times

Step2:
28-09-2022_07-52-02.png
28-09-2022_07-52-02.png (12.94 KiB) Viewed 740 times

Step3:
28-09-2022_07-52-35.png
28-09-2022_07-52-35.png (8.07 KiB) Viewed 740 times
Wolfgang

How to implement EditFocusChange in Winforms?

Posted: Wed Sep 28, 2022 6:09 am
by Chris
Hi Wolfgang,

Ah, thanks, now I understood what you meant!

How to implement EditFocusChange in Winforms?

Posted: Wed Sep 28, 2022 6:37 am
by wriedmann
Hi Chris,
as I wrote: this is very helpful and I use it several times to see what the prototype on an event handler is, even if I don't use the code as it is written by XIDE, because the "Eventhandler" syntax is not needed anymore in most cases.
Wolfgang

How to implement EditFocusChange in Winforms?

Posted: Wed Sep 28, 2022 11:38 am
by ic2
Hello Wolfgang,
wriedmann post=24036 userid=336 wrote: So you are missing the return type "as void".
There was no problem there. With or without a void, Method textBoxTo_GotFocus isn't fired when I enter the textBoxTo.

Hence I thought I had to register an event handler for it (never sure when I need to to that and when not...) and it is there were I got the error.

I've tried multiple alternatives:

1 Private Method textBoxTo_Enter
2 Private Method textBoxTo_Leave
3 Private Method textBoxTo_Validating
4 textBoxTo_TextChanged

Only 4) is actually working when I type something in that textbox but that is not what is needed here.


For 1&2 Microsoft states in https://learn.microsoft.com/en-us/dotne ... esktop-6.0:

The Enter and Leave events are suppressed by the Form class. The equivalent events in the Form class are the Activated and Deactivate events.

No idea why and even less why Activated/Deactivated, which are fired (or at least documented to do so) when the whole window gets or loses focus, are indicated as alternative.

Bottom line is that there doesn't seem to be any working even which is fired when I enter a control on a Winforms window.

So if anyone has an idea of way or alternative event which actually works, that would be great.

Dick

How to implement EditFocusChange in Winforms?

Posted: Wed Sep 28, 2022 11:53 am
by wriedmann
Hi Dick,
for me this works:

Code: Select all

self:oField1:GotFocus += self:Field1GotFocus
self:oField1:Location := System.Drawing.Point{96 , 6}
self:oField1:LostFocus += self:Field1LostFocus

Code: Select all

method Field1GotFocus(sender as System.Object , e as System.EventArgs) as void
oDisplay:Text		:= "Field1 got focus"
return

method Field1LostFocus(sender as System.Object , e as System.EventArgs) as void
oDisplay:Text		:= "Field1 lost focus"
return
28-09-2022_13-51-00.png
28-09-2022_13-51-00.png (5.72 KiB) Viewed 740 times
And here is the application, based on the XIDE sample Windows Forms app:
FocusChangeApp.zip
(2.46 KiB) Downloaded 80 times
I'm sorry, you have to import that file in XIDE, I don't like to transport it to Visual Studio.
Wolfgang

How to implement EditFocusChange in Winforms?

Posted: Wed Sep 28, 2022 12:11 pm
by Fabrice
Hi Dick,
I think you misunderstand the doc :
When using Control, the fired events are Enter & Leaver
Form is inheriting from Control, so we should have Enter/Leave also, but at that level, the fired events are Activated/Deactivate.

[strike]Now, the GotFocus Event doesn't exist with Windows Forms, you have to use Enter there.[/strike]
In order to link an Event to a Method, I suggest you use the integrated mechanism of VS :
Select the control, go to the Properties Window, and click on the Event button (Lightning) to switch to the event panel.
Then scroll down to the desired event and double-click on it : The X# integration will generate the needed skeleton, create the link-code and open the editor in the corresponding method.
!!! NEVER suppress the generated skeleton if you have made a error... VS generate the code, so you have to remove it FROM VS.
Follow the same process, but instead to double_clicking on it, Right-Click and select Reset in the context menu.

Now, If you want to check the events and their firing order, I have created a small demo app for you, it is attached to this message.

HTH,
Fab
EventTest.zip
(11.37 KiB) Downloaded 80 times

How to implement EditFocusChange in Winforms?

Posted: Wed Sep 28, 2022 3:01 pm
by ic2
Hello Wolfgang, Fabrice,
wriedmann post=24046 userid=336 wrote: for me this works:

Code: Select all

self:oField1:GotFocus += self:Field1GotFocus
[/quote]

Thank you very much for your efforts and I can tell you that it works (even if not generated from VS). It [i]does[/i] need registering the event but now I am lost why it gave the Error XS0407. Only difference seems the missing 2nd self compared to your registering code but when I uncommented my original registering code it still compiled. And it honestly did not this morning.

Never mind, it compiles and it works now as it should. Later I may need Leave/Enter and then I will have Fabrice's sample to implement it.

Thanks again!

Dick