DarioSantarelli.Blog("UgiDotNet");

<sharing mode=”On” users=”*” />
posts - 176, comments - 144, trackbacks - 3

My Links

News


This is my personal blog. These postings are provided "AS IS" with no warranties, and confer no rights.

logo linkedIn logo Twitter logo FaceBook logo RSS logo Email

Logo DotNetMarche
Logo XPUG Marche



Tag Cloud

Archives

Post Categories

My English Blog

martedì 7 settembre 2010

[WPF] TextBox e input filtering

Quando si realizza un’interfaccia grafica per l’inserimento dati, è sempre buona prassi prevedere una prima "validazione" dell'input utente. Una tecnica molto semplice per raggiungere tale obiettivo potrebbe basarsi sull’idea di filtrare l’input in modo da non permettere l’inserimento di caratteri non validi. Nel caso della TextBox, in particolare, si potrebbe pensare di estendere il controllo affinché il filtraggio avvenga a fronte di un matching con un generica espressione regolare… una RegexTextBox dunque :).

public class RegexTextBox : System.Windows.Controls.TextBox
{               
  public string Pattern { get; set; }

  public RegexTextBox()
  {
     CommandBinding pasteCommandBinding = new CommandBinding(ApplicationCommands.Paste);
     pasteCommandBinding.CanExecute += delegate(object sender, CanExecuteRoutedEventArgs e)
     {
       e.Handled = !IsValid(Clipboard.GetText());
     };
     this.CommandBindings.Add(pasteCommandBinding);
  }
       
  protected override void OnPreviewTextInput(System.Windows.Input.TextCompositionEventArgs e)
  {                       
     string newText = Text + e.Text;
     e.Handled = !IsValid(newText);           
     base.OnPreviewTextInput(e);
  }

  private bool IsValid(string text)
  {
     if (string.IsNullOrEmpty(text)) return true;
     return new Regex(Pattern).IsMatch(text);
  }
}


Un esempio di utilizzo potrebbe essere il seguente (ammissione di soli numeri naturali):

<src:RegexTextBox Pattern="^[0-9]+$"></src:RegexTextBox>



Nel codice sopra riportato viene mostrata anche un’ accortezza che può risultare utile, ovvero il filtraggio dell’input in caso di operazioni di Cut/Copy and Paste. Tale controllo avviene agganciando la nostra RegexTextBox all’application command ApplicationCommands.Paste, in modo da poter validare il contenuto della clipboard.

Technorati Tags: ,

posted @ martedì 7 settembre 2010 21.13 | Feedback (0) | Filed Under [ WPF ]

Powered by: