Csharp/C Sharp/GUI Windows Form/MaskedTextBox

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

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());
    }
}