Csharp/C Sharp/GUI Windows Form/MaskedTextBox
Masked TextBox Host
/*
User Interfaces in C#: Windows Forms and Custom Controls
by Matthew MacDonald
Publisher: Apress
ISBN: 1590590457
*/
using System;
using System.Drawing;
using System.Collections;
using System.ruponentModel;
using System.Windows.Forms;
using System.Data;
namespace MaskedTextBoxHost
{
/// <summary>
/// Summary description for MaskedTextBoxHost.
/// </summary>
public class MaskedTextBoxHost : System.Windows.Forms.Form
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ruponentModel.Container components = null;
public MaskedTextBoxHost()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
//
// MaskedTextBoxHost
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 266);
this.Name = "MaskedTextBoxHost";
this.Text = "MaskedTextBoxHost";
this.Load += new System.EventHandler(this.MaskedTextBoxHost_Load);
}
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new MaskedTextBoxHost());
}
private void MaskedTextBoxHost_Load(object sender, System.EventArgs e)
{
MaskedTextBox txtMask = new
MaskedTextBox();
txtMask.Location = new Point(10, 10);
txtMask.Mask = "(###) ###-####";
this.Controls.Add(txtMask);
}
}
public class MaskedTextBox : TextBox
{
private string mask;
public string Mask
{
get
{
return mask;
}
set
{
mask = value;
this.Text = "";
}
}
protected override void OnKeyPress(KeyPressEventArgs e)
{
if (Mask != "")
{
// Suppress the typed character.
e.Handled = true;
string newText = this.Text;
// Loop through the mask, adding fixed characters as needed.
// If the next allowed character matches what the user has
// typed in (a number or letter), that is added to the end.
bool finished = false;
for (int i = this.SelectionStart; i < mask.Length; i++)
{
switch (mask[i].ToString())
{
case "#" :
// Allow the keypress as long as it is a number.
if (Char.IsDigit(e.KeyChar))
{
newText += e.KeyChar.ToString();
finished = true;
break;
}
else
{
// Invalid entry; exit and don"t change the text.
return;
}
case "." :
// Allow the keypress as long as it is a letter.
if (Char.IsLetter(e.KeyChar))
{
newText += e.KeyChar.ToString();
finished = true;
break;
}
else
{
// Invalid entry; exit and don"t change the text.
return;
}
default :
// Insert the mask character.
newText += mask[i];
break;
}
if (finished)
{ break; }
}
// Update the text.
this.Text = newText;
this.SelectionStart = this.Text.Length;
}
}
protected override void OnKeyDown(KeyEventArgs e)
{
// Stop special characters.
e.Handled = true;
}
}
}
MaskedTextBox with MaskInputRejected event
using System;
using System.Collections.Generic;
using System.ruponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
public class MainWindow : Form {
public MainWindow() {
InitializeComponent();
CreateLabelControl();
}
private void btnDisplayData_Click(object sender, EventArgs e) {
string textBoxData = "";
textBoxData += string.Format("MultiLine: {0}\n", txtMultiline.Text);
textBoxData += string.Format("\nPassword: {0}\n", txtPassword.Text);
textBoxData += string.Format("\nUppercase: {0}\n", txtUpperCase.Text);
textBoxData += string.Format("\nMasked: {0}\n", txtMaskedTextBox.Text);
MessageBox.Show(textBoxData, "Here is the data in your TextBoxes");
}
private void CreateLabelControl() {
Label lblInstructions = new Label();
lblInstructions.Text = "Please enter values in all the text boxes";
lblInstructions.Font = new Font("Times New Roman", 9.75F, FontStyle.Bold);
lblInstructions.AutoSize = true;
lblInstructions.Location = new System.Drawing.Point(16, 13);
lblInstructions.Size = new System.Drawing.Size(240, 16);
this.Controls.Add(lblInstructions);
}
private void txtMaskedTextBox_MaskInputRejected(object sender, MaskInputRejectedEventArgs e) {
this.Text = string.Format("Error: {0}", e.RejectionHint);
}
private void txtMaskedTextBox_KeyDown(object sender, KeyEventArgs e) {
this.Text = "Labels and TextBoxes";
}
private void InitializeComponent() {
this.lblPassword = new System.Windows.Forms.Label();
this.txtPassword = new System.Windows.Forms.TextBox();
this.lblMultiline = new System.Windows.Forms.Label();
this.txtMultiline = new System.Windows.Forms.TextBox();
this.lblUpperCaseOnly = new System.Windows.Forms.Label();
this.txtUpperCase = new System.Windows.Forms.TextBox();
this.lblMaskedTextBox = new System.Windows.Forms.Label();
this.txtMaskedTextBox = new System.Windows.Forms.MaskedTextBox();
this.btnDisplayData = new System.Windows.Forms.Button();
this.SuspendLayout();
this.lblPassword.AutoSize = true;
this.lblPassword.Location = new System.Drawing.Point(13, 43);
this.lblPassword.Name = "lblPassword";
this.lblPassword.Size = new System.Drawing.Size(94, 13);
this.lblPassword.TabIndex = 0;
this.lblPassword.Text = "&Password TextBox:";
this.txtPassword.Location = new System.Drawing.Point(125, 43);
this.txtPassword.Name = "txtPassword";
this.txtPassword.PasswordChar = "*";
this.txtPassword.Size = new System.Drawing.Size(220, 20);
this.txtPassword.TabIndex = 1;
this.lblMultiline.AutoSize = true;
this.lblMultiline.Location = new System.Drawing.Point(14, 80);
this.lblMultiline.Name = "lblMultiline";
this.lblMultiline.Size = new System.Drawing.Size(86, 13);
this.lblMultiline.TabIndex = 2;
this.lblMultiline.Text = "&Multiline TextBox:";
this.txtMultiline.Location = new System.Drawing.Point(125, 80);
this.txtMultiline.Multiline = true;
this.txtMultiline.Name = "txtMultiline";
this.txtMultiline.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.txtMultiline.Size = new System.Drawing.Size(220, 52);
this.txtMultiline.TabIndex = 3;
this.lblUpperCaseOnly.AutoSize = true;
this.lblUpperCaseOnly.Location = new System.Drawing.Point(15, 157);
this.lblUpperCaseOnly.Name = "lblUpperCaseOnly";
this.lblUpperCaseOnly.Size = new System.Drawing.Size(82, 13);
this.lblUpperCaseOnly.TabIndex = 4;
this.lblUpperCaseOnly.Text = "&Uppercase Only:";
this.txtUpperCase.CharacterCasing = System.Windows.Forms.CharacterCasing.Upper;
this.txtUpperCase.Location = new System.Drawing.Point(125, 157);
this.txtUpperCase.Name = "txtUpperCase";
this.txtUpperCase.Size = new System.Drawing.Size(220, 20);
this.txtUpperCase.TabIndex = 5;
//
this.lblMaskedTextBox.AutoSize = true;
this.lblMaskedTextBox.Location = new System.Drawing.Point(15, 199);
this.lblMaskedTextBox.Name = "lblMaskedTextBox";
this.lblMaskedTextBox.Size = new System.Drawing.Size(83, 13);
this.lblMaskedTextBox.TabIndex = 7;
this.lblMaskedTextBox.Text = "Mas&ked TextBox";
//
this.txtMaskedTextBox.BeepOnError = true;
this.txtMaskedTextBox.CausesValidation = false;
this.txtMaskedTextBox.Location = new System.Drawing.Point(125, 199);
this.txtMaskedTextBox.Mask = "(999) 000-0000";
this.txtMaskedTextBox.Name = "txtMaskedTextBox";
this.txtMaskedTextBox.Size = new System.Drawing.Size(220, 20);
this.txtMaskedTextBox.TabIndex = 8;
this.txtMaskedTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtMaskedTextBox_KeyDown);
this.txtMaskedTextBox.MaskInputRejected += new System.Windows.Forms.MaskInputRejectedEventHandler(this.txtMaskedTextBox_MaskInputRejected);
//
this.btnDisplayData.Location = new System.Drawing.Point(257, 236);
this.btnDisplayData.Name = "btnDisplayData";
this.btnDisplayData.Size = new System.Drawing.Size(88, 23);
this.btnDisplayData.TabIndex = 6;
this.btnDisplayData.Text = "Display Data";
this.btnDisplayData.Click += new System.EventHandler(this.btnDisplayData_Click);
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(357, 276);
this.Controls.Add(this.txtMaskedTextBox);
this.Controls.Add(this.lblMaskedTextBox);
this.Controls.Add(this.btnDisplayData);
this.Controls.Add(this.txtUpperCase);
this.Controls.Add(this.lblUpperCaseOnly);
this.Controls.Add(this.txtMultiline);
this.Controls.Add(this.lblMultiline);
this.Controls.Add(this.txtPassword);
this.Controls.Add(this.lblPassword);
this.Text = "Fun with Labels and TextBoxes";
this.ResumeLayout(false);
this.PerformLayout();
}
private System.Windows.Forms.Label lblPassword;
private System.Windows.Forms.TextBox txtPassword;
private System.Windows.Forms.Label lblMultiline;
private System.Windows.Forms.TextBox txtMultiline;
private System.Windows.Forms.Label lblUpperCaseOnly;
private System.Windows.Forms.TextBox txtUpperCase;
private System.Windows.Forms.Label lblMaskedTextBox;
private System.Windows.Forms.MaskedTextBox txtMaskedTextBox;
private System.Windows.Forms.Button btnDisplayData;
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.Run(new MainWindow());
}
}