Ehlo,

I've used Wx::Perl::TextValidator to limit accepted keypresses in
TextCtrl. This has been enough for controls till now but as I'm moving
to a broader user base I need to filter with more intelligence.

Now I need to check that the user enters data to correspond to this
regex: (M|O|(NC?)|(\d+)). So at every moment the string in the control
must match this regex. What would be the recommended way to code this ?
Can this be done with a Validator ?

Following is working by intercepting the EVT_TEXT event on the control:
(Ugly code, but working and explaining what I wish for...)

  EVT_TEXT (
      $self->gridInStock, $control, sub {
          my ($self, $event) = @_ ;
          my $curValue = $control->GetValue() ;
          $curValue = uc($curValue) ;
          if ( $curValue =~ m/(M|O|(NC?)|(\d+))/ ) {
              $curValue = $1 ;
          } else {
              $curValue = "" ;
          } ;
          my $curPos = List::Util::max( $control->GetInsertionPoint(),
                                        length($curValue) ) ;
          $control->ChangeValue("$curValue") ;
          $control->SetInsertionPoint($curPos) ;
      })

Thanks for help!

-- 
erik colson
ecocode.net

Reply via email to