LightSwitch Upper Case in TextBoxes.

How to uppercase text entered into a textbox by a user?

Answer:

Handle the KeyUp event.

Example:

Imagine you have a NewClient screen and want to upper the text entered in a property called “Name”.

In NewClient.cs

partial void NewClient_InitializeDataWorkspace(global::System.Collections.Generic.List saveChangesTo)
 {
   this.FindControl("Name").ControlAvailable += TextBoxAvailable;
   // Write your code here.

   this.ClientProperty = new Client();
 }

private void TextBoxAvailable(object sender, ControlAvailableEventArgs e)
 {
   ((System.Windows.Controls.TextBox)e.Control).KeyUp += TextBoxKeyUp;
 }

private void TextBoxKeyUp(object sender, System.Windows.RoutedEventArgs e)
 {
   var textbox = (System.Windows.Controls.TextBox)sender;

   string textUppered = textbox.Text.ToUpper();
   int selStart = textbox.SelectionStart;
   textbox.Text = textUppered;
   textbox.SelectionStart = selStart;
 }

Source: Pro Visual Studio LightSwith 2011 Development by Tim Leung and Yann Duran, Apress

Update

The previous code has a drawback, when you entered the text you can see how the text gets uppered, like an animation. To correct this behaviour handle the KeyDown event instead.

Here is a new version:

public partial class NewClient
{
   partial void NewClient_Activated()
   {
      this.FindControl("Name").ControlAvailable += TextBoxAvailable;
      // Write your code here.

      this.ClientProperty = new Client();
   }

   private void TextBoxAvailable(object sender, ControlAvailableEventArgs e)
   {
      ((System.Windows.Controls.TextBox)e.Control).KeyDown += TextBoxKeyDown;
   }

   private void TextBoxKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
   {
      var textbox = (System.Windows.Controls.TextBox)sender;

      if (e.Key >= System.Windows.Input.Key.A && e.Key <= System.Windows.Input.Key.Z)
      {
         int selStart = textbox.SelectionStart;
         if (textbox.SelectionLength > 0)
         {
            string str1 = textbox.Text.Remove(textbox.SelectionStart, textbox.SelectionLength);
            textbox.Text = str1.Insert(selStart, e.Key.ToString()).ToUpper();
         }
         else
         {
            textbox.Text = textbox.Text.Insert(selStart, e.Key.ToString()).ToUpper();
         }
         textbox.SelectionStart = selStart + 1;
         e.Handled = true;
      }
   }
}

Note: Still there is a flaw, if you paste from the Clipboard text in lowered case, it doesn’t work.

Advertisements
This entry was posted in LightSwitch and tagged , , , , , , , , , , , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s