Thanks Glenn,
There doesn't seem to be any gui documentaion or examples on the exact right 
and wrong way this should be handled.

I guess it's a bit understandable why newbies like me find it confusing. :)

I did play with the userdata method also and that is a pretty cool tool.
I appreciate the help.

  ----- Original Message ----- 
  From: Glenn W Munroe 
  To: 'Doug Hoffman' ; perl-win32-gui-users@lists.sourceforge.net 
  Sent: March 21, 2008 1:41 PM
  Subject: RE: [perl-win32-gui-users] Button onClick event


  Doug,

   

  That will work, but it breaks one of the golden rules of OO programming: 
don't access internal object data directly. Of course, it doesn't help that 
there isn't a 'Name' method! The same applies to the window handle {-handle}, 
incidentally.

   

  A more purist approach would be to use the UserData method, something like 
this:

   

  ##################################################################

  use strict;

  use Win32::GUI();

   

  my $obMW = new Win32::GUI::Window(

              -name                           => 'Main',

              -size                             => [200,200],

              -text                              => 'Main',

  );

   

  $obMW->AddButton(

              -name                           => 'Button1',

              -pos                              => [10,10],

              -size                             => [75,23],

              -text                              => 'Button1',

              -onClick                        => sub { Win32::MsgBox("You just 
clicked ".$_[0]->UserData) },

  );

   

  $obMW->Button1->UserData('Button1');

   

  $obMW->AddButton(

              -name                           => 'Button2',

              -pos                              => [10,50],

              -size                             => [75,23],

              -text                              => 'Button2',

              -onClick                        => sub { Win32::MsgBox("You just 
clicked ".$_[0]->UserData()) },

  );

   

  $obMW->Button2->UserData('Button2');

   

  $obMW->Show();

  Win32::GUI::Dialog();

  #######################################################################

   

  That won't work for the handle, though, as we don't have it at control 
creation time. Perhaps we should add 'Name' and 'Handle' methods to the module?

   

  Glenn

   


------------------------------------------------------------------------------

  From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Doug Hoffman
  Sent: 21 March 2008 14:23
  To: perl-win32-gui-users@lists.sourceforge.net
  Subject: Re: [perl-win32-gui-users] Button onClick event

   

  Thanks to all who replied.

  Here is the code that I received.

   

  my ($ButtonClicked, @other_params) = @_;
  my $ButtonName = $ButtonClicked->{-name};


  Thanks to Sean for the email
  He was nice enough to explain the mechanics of the code above and how it 
fetches the button -name

   

   

  Here's the button add and button_click sub for all who may want it.

   

  ### add button #########################

  my $Button = new Win32::GUI::Button($Main,
  -name => "Test",
  -tip => "Test",
  -width => 15,
  -height => 15,
  -left => 600,
  -onClick => 'Button_Clicked',
  );
  $Main->AddButton($Button);

  ####################################

   

  ####################################
  sub Button_Clicked
  {

  my ($ButtonClicked, @other_params) = @_;
  my $ButtonName = $ButtonClicked->{-name};

   

  ### $ButtonName is now ready for use :) ###

  }
  #####################################

  Thanks,

  Doug

   

   

   

   

   

  The first item passed into the onClick subroutine is the 
  Win32::GUI::Button object. (Note: NOT the {-name} of the object, but the 
  blessed Perl object itself.)

  > ### create buttons ###########################################
  > $ButtonNumber = new Win32::GUI::Button($Main,
  > -name => "$ButtonName",
  > -tip => "$ButtonName",
  > -pos => [$posX, $posY],
  > -size => [15, 15],
  > -onClick => 'Button_Clicked',
  > );  
  >  
  >  
  > ### sub that all buttons go to ###
  > sub Button_Clicked{
  >  
  > ?????????????????????????? get button -name here. :P

  my ($button, @other_params) = @_;
  my $ButtonName = $button->{-name};

  > $Main->Status3->Text("$ButtonName");## display button name in status bar
  > }
  > #########################################################

  I can't recall off the top of my head what the other params are, but the 
  docs should say. (And if all you want is the name, they are not important.)
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Perl-Win32-GUI-Users mailing list
Perl-Win32-GUI-Users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users
http://perl-win32-gui.sourceforge.net/

Reply via email to