Click here to Skip to main content
Click here to Skip to main content

VB.NET Maskedbox Control - Final Release

, 17 Jan 2003
Rate this:
Please Sign up or sign in to vote.
A very useful maskedbox control using vb.net

Sample Image - MaskedBox_Control.jpg

Introduction

VB.NET does not have a masked texbox and it's very important for user input. So I have made it myself because the components I have found is not good enough for me.

Details

  • The "#" character in the mask is used for digit only
  • The "&" character accepts letter or digit
  • Supported mask symbols are "-", ".", ",", "/", "\", ":"

Using Component

The use of this component is very simple. You have to select the toolbox panel, right click in the windows forms section and select customize toolbox.

Select .NET framework components, then click browse and select maskedbox.dll in the download path. The maskedbox component will appear at the end of windows forms panel. Now select the component and drop it on a form.

Then set the mask property with any combination of valid characters

Ex. ##.###.####-###.###/###

History

  • Initial - I fixed a bug where the space key is not recognized. This version inherits a textbox component to publish all features of the textbox plus maskedbox
  • 20-jan-2003 Fixes - Function keys now are not handled by control. They cause an invalid character in between the text. The function SetText has been created. Programatically changing the text value in control din't change the masked text, so I created this function where the parameter is a string to fill the text (with no mask). If the text is "", then the text and mask is cleared with a empty mask.
  • 21-jan-2003 - The Final Release!!! I hope! Accept all characters and function keys. The delete key is working now !

Comments

Any comments ? Email me at pdvtech@terra.com.br. Visit my business site at www.pdvtech.com.br.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

Share

About the Author

RicardoPDV
Web Developer
Brazil Brazil
Im a 33 years old and work developing applications since 14 years old
 
COBOL, my first language (i love)
BASIC, i born know
 
Visual Basic Rock's

Comments and Discussions

 
GeneralGreat Help - Thanks Pinmembermbusfield26-Nov-06 5:14 
GeneralSuggested enhancements PinmemberVBProEd31-Dec-05 9:45 
Thanks for the simplistic code that was easy to read and modify for my purposes. There are several masked edit controls in this forum that honestly don't work or were poorly tested. I thought I would share the enhancements to my version for the stated valid reasons. My scope for these changes was around date formatting/editing.
 
1. If a user selects the entire field for delete (to re-type), the control should clear out the entire field. Once the user starts typing, the mask automatically fills in and the user can start typing the new date. Here is my code addition:
 
Protected Overrides Sub OnKeyDown(ByVal e As System.Windows.Forms.KeyEventArgs)
Dim tmpset = Me.SelectionStart
 
On Error Resume Next
Select Case e.KeyCode
Case Keys.Delete
If Len(Me.SelectedText) = Len(Me.Text) Then
Me.Text = String.Empty
Exit Select
End If

Me.Text = ""
For a = tmpset To aMask.Length - 1
Select Case aMskMask.GetValue(a + 1)
Case ".", "-", "\", "/", ","
aMask.SetValue(aMask.GetValue(a + 2), a)
a = a + 1
Case Else
aMask.SetValue(aMask.GetValue(a + 1), a)
End Select
Next
 
aMask.SetValue(CType("_", Char), aMask.Length - 1)
 
e.Handled = True
 
Me.Text = ""
For a = 0 To aMask.Length - 1
Me.Text += aMask.GetValue(a)
Next
Me.SelectionStart = tmpset
 
End Select
End Sub

 
2. With SQL Server, DateTime values with leading zeroes are stored as m/d/yyyy, mm/d/yyyy and m/dd/yyyy (no leading zeroes). This creates havoc in a control when attempting to edit the "as stored" value since most data entry is done heads down without concern of field delimiters. I added the following events to handle re-formatting the date when first entering then leaving the control. These events also handle any input field defined with a mask of ##/##/#### and the user does not enter the Century date value.
 
Note: You should always set the "MaxLength" property on MaskedBox to either 8 or 10 (for dates) so that the user can automatically move to the next control.
 
Protected Overrides Sub OnEnter(ByVal e As System.EventArgs)
MyBase.Text = Me.FormatData(Me.Text())
End Sub
 
Protected Overrides Sub OnLeave(ByVal e As System.EventArgs)
MyBase.Text = Me.FormatData(Me.Text())
End Sub
 
Protected Function FormatData(ByVal sText As String) As String
 
If sText Is Nothing Or sText Is String.Empty Then
Exit Function
Else
sText = sText.Replace("_", "")
 
If Len(Me.Mask) < 10 Then
Try
Dim MyDate As DateTime = CType(sText, Date)
Return MyDate.ToString("MM/dd/yy")
 
Catch
 
Return sText
 
End Try
Else
Try
Dim MyDate As DateTime = CType(sText, Date)
Return MyDate.ToString("MM/dd/yyyy")
 
Catch
 
Return sText
 
End Try
End If
 
End If
 
End Function

 
3. For those folks using SQL Server with controls bound to datasets that don't want to show the "as stored" date value from SQL Server, add the following handler and subroutine for all date field reformatting in your form.
 
Note: User-Defined Date/Time Formats (Format Function) - Unlike previous versions of Visual Basic, the Format function characters are case-sensitive. "MM" is not the same as "mm".

AddHandler txtMyDateField1.DataBindings("Text").Format, AddressOf Format
AddHandler txtMyDateField2.DataBindings("Text").Format, AddressOf Format
 
Public Sub Format(ByVal sender As Object, ByVal e As Windows.Forms.ConvertEventArgs)
'This subroutine converts any SQL Server timedate to mm/dd/yy format
If Not IsDBNull(e.Value) Then
Dim MyDate As DateTime = CType(e.Value, Date)
e.Value = MyDate.ToString("MM/dd/yy")
End If
End Sub

 
Enjoy!Big Grin | :-D
JokeRe: Suggested enhancements PinmemberRicardoPDV3-Jan-06 2:45 
Generalmiguelfantastic Pinmembermiguelfantastic27-May-05 14:03 
GeneralProblem in Using this Control Pinmembernamasteall20001-Oct-04 5:21 
GeneralBackspace Bug PinmemberAnAverageJoe9-Jun-04 6:54 
GeneralRe: Backspace Bug PinmemberMrGTI1-Oct-04 5:32 
GeneralRe: Backspace Bug Pinmemberbuffbuh28-Mar-07 13:54 
GeneralAbsolutely Clueless.... PinmemberTheKanuck27-May-04 4:02 
GeneralRe: Absolutely Clueless.... PinmemberXpto00129-Oct-04 19:24 
GeneralPoor Control Load PinmemberMrGTI23-Sep-03 5:30 
GeneralRe: Poor Control Load Pinmembernamasteall20001-Oct-04 5:13 
GeneralBUG Pinmemberbalu_vee14-Aug-03 4:34 
GeneralRe: BUG Pinmembernamasteall20001-Oct-04 5:14 
GeneralOption strict please Pinmembernemaroller30-Apr-03 5:18 
GeneralRe: Option strict please Pinmembernamasteall20001-Oct-04 5:14 
Questionsmall bug ??? Pinmemberzefrit22-Apr-03 8:13 
AnswerHelp me Pinmembernamasteall20001-Oct-04 5:19 
GeneralSmall bug PinmemberRichard Deeming20-Jan-03 4:18 
GeneralRe: Small bug PinmemberRicardoPDV20-Jan-03 6:50 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.1411022.1 | Last Updated 18 Jan 2003
Article Copyright 2003 by RicardoPDV
Everything else Copyright © CodeProject, 1999-2014
Layout: fixed | fluid