Dim NForm as Form NForm = new MyForm(ME) as "MyForm"
the event will fire at : Public Sub MyForm_KeyPress() End 2017-05-29 17:34 GMT+02:00 Tobias Boege <tabo...@gmail.com>: > On Mon, 29 May 2017, Leon Davis wrote: >> Using Gambas v3.9.2 and GTK+3 >> >> I have added a form to another form: >> >> Dim NForm as Form >> NForm = new MyForm(ME) as "MyForm" >> >> The problem I'm having is none of the Key events, i.e. (keypress, keyup, >> keydown) for either form do anything. Also the Form_Resize for NForm >> doesn't fire. In my search I found an item that mentioned doing a search >> for listener in the Gambas wiki but that search was unsuccessful. Searched >> the mailing list with the same result. Any suggestions? > > What is your problem exactly; where does the event not fire? But let me make > a guess to what question you are asking and answer that question. > > You want to know why the Form_Resize event in your MyForm class does not > fire? The reason for this is that you give your NForm instance of the MyForm > class an event name "MyForm" explicitly (by using As "MyForm"). > > I'll assume that the above code is executed inside another Form called, say, > FParent. If you create an object inside FParent and give it an event name, > as you do above, FParent will become the *default event observer* for that > object. It will intercept all the events that the object NForm raises and > these events will be issued under the event name "MyForm" you specified. > > Why is this a problem? Normally, forms are their own default event observer, > under the event name "Form". This is a mechanic hidden inside the Form class > code -- when a form object is created and detects that it hasn't gotten an > explicit default event observer, it makes itself its own event observer. > This is what enables you to normally intercept a Form's Resize event inside > its own class code, by defining the Form_Resize event handler. > > To summarise: because you use the As "MyForm" syntax, you give NForm a new > default event observer (namely FParent). You can now intercept the events of > NForm inside the code of FParent, by using the event name MyForm, but you > *cannot* intercept the events in the MyForm code using the event name Form > anymore. > > The solution is: don't use the As "MyForm" syntax if you want to continue > receiving NForm's events inside MyForm's class code. Instead you should > *duplicate* all the events by using an Observer: > > Dim NForm As MyForm > Dim hObs As Observer > > NForm = New MyForm > hObs = New Observer(NForm) As "MyForm" > > Now you have NForm which is its default event observer (so Form_Resize will > fire inside the MyForm class) and you duplicate all the events that happen > through the observer, so you also receive the events in FParent, such as > MyForm_Resize. I believe this is what you mean by "listener", but the > appropriate Gambas term is "observer". > > The article "The Gambas Object Model" [1] in the wiki should be mandatory > reading for everyone. It feels like I spend more time citing this page than > anything else I do on this mailing list. > > Regards, > Tobi > > [1] http://gambaswiki.org/wiki/doc/object-model#t10 > > -- > "There's an old saying: Don't change anything... ever!" -- Mr. Monk > > ------------------------------------------------------------------------------ > Check out the vibrant tech community on one of the world's most > engaging tech sites, Slashdot.org! http://sdm.link/slashdot > _______________________________________________ > Gambas-user mailing list > Gambas-user@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/gambas-user -- Fabien Bodard ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user