Csharp/C Sharp/GUI Windows Form/MaskedTextBox

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Masked TextBox Host

<source lang="csharp"> /* 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;
       }

}

}


      </source>


MaskedTextBox with MaskInputRejected event

<source lang="csharp"> 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());
   }

}

</source>