From: Octavian R. <ora...@fc...> - 2006-02-25 12:31:07
|
Hi, I have tried to set an event handler -onLostFocus, but if the control loses the focus when the application closes (alt+F4), it gives the following error: Can't call method "Text" on an undefined value at E:\lucru\agenda\agenda.pl line 68 during global destruction. How can I detect if the control loses the focus because I have pressed the tab key, or that if the whole application was closed? Thank you. Teddy |
From: Robert M. <rm...@po...> - 2006-02-27 21:17:34
|
Octavian Rasnita wrote: > I have tried to set an event handler -onLostFocus, but if the control loses > the focus when the application closes (alt+F4), it gives the following > error: > > Can't call method "Text" on an undefined value at E:\lucru\agenda\agenda.pl > line 68 during global destruction. > > How can I detect if the control loses the focus because I have pressed the > tab key, or that if the whole application was closed? I you can post a short and complete example that I can run and see what you're doing then I'll have a look to see if you're doing something wrong, or whether we have a bug. You have not posted enough information for me to see what you're trying to do. Regards, Rob. -- Robert May Win32::GUI, a perl extension for native Win32 applications http://perl-win32-gui.sourceforge.net/ |
From: Octavian R. <ora...@fc...> - 2006-02-28 07:52:23
|
From: "Robert May" <rm...@po...> > Octavian Rasnita wrote: > > I have tried to set an event handler -onLostFocus, but if the control loses > > the focus when the application closes (alt+F4), it gives the following > > error: > > > > Can't call method "Text" on an undefined value at E:\lucru\agenda\agenda.pl > > line 68 during global destruction. > > > > How can I detect if the control loses the focus because I have pressed the > > tab key, or that if the whole application was closed? > > I you can post a short and complete example that I can run and see what > you're doing then I'll have a look to see if you're doing something > wrong, or whether we have a bug. You have not posted enough information > for me to see what you're trying to do. > Ok, here is a simple test program. use strict; use Win32::GUI; my $Win = new Win32::GUI::Window( -title => 'Test', -pos => [100, 100], -size => [400, 400], -dialogui => 1, ); $Win->AddButton( -name => 'But', -text => "&Ok", -pos => [10, 10], -size => [100, 20], -tabstop => 1, ); my $Field = $Win->AddTextfield( -name => 'Field', -pos => [10, 50], -size => [100, 20], -tabstop => 1, ); $Win->Show(); Win32::GUI::Dialog(); sub Win_Terminate {-1} sub Field_LostFocus { $Win->But->Text("New text"); } __END__ The program works fine, and if I press the tab key when the focus is on the textfield, the focus moves to the button and the text of the button is changed. If I close the application in that moment, it closes without errors. But if I press agan the tab key and the focus moves again to the text field, and only after this I close the application, it gives an error, because the onLostFocus event is fired when the application closes. I have seen that if I give a name to the textfield using: my $Field = $Win->Textfield(... and then I use $Field->Text("..."); instead of $Win->But->Text("New text"); the program doesn't give an error. But why does it give an error when using $Win->Field->Text(...)? Thank you. |