【愚公系列】2023年09月 Winform控件专题 MaskedTextBox控件详解


前言

Winform控件是Windows Forms中的用户界面元素,它们可以用于创建Windows应用程序的各种视觉和交互组件,例如按钮、标签、文本框、下拉列表框、复选框、单选框、进度条等。开发人员可以使用Winform控件来构建用户界面并响应用户的操作行为,从而创建功能强大的桌面应用程序。

一、MaskedTextBox控件详解

MaskedTextBox控件是Winform中的一个文本框控件,用于限制用户输入的格式。它允许您指定输入格式并自动格式化输入。例如,您可以使用它来限制日期输入的格式或电话号码的格式等。

MaskedTextBox控件有一个Mask属性,在该属性中您可以设置输入限制。以下是一些常用的输入格式:

  1. 日期格式:设置Mask属性为"00/00/0000",将文本框限制为日期格式,如"01/01/2000"。

  2. 时间格式:设置Mask属性为"00:00",将文本框限制为时间格式,如"12:30"。

  3. 电话号码格式:设置Mask属性为"(999) 000-0000",将文本框限制为电话号码格式,如"(123) 456-7890"。

  4. 邮编格式:设置Mask属性为"00000",将文本框限制为邮编格式,如"12345"。

  5. 自定义格式:您可以使用单个字符(如"0"、“9”、“a"等),表示可输入任何字符;或使用”#“,表示可输入数字;或使用”@",表示可输入字母。

通过设置PromptChar属性,您可以设置未输入字符时在文本框中显示的字符。例如,设置PromptChar属性为"“,则在文本框中未输入字符时会显示”"。

除了Mask和PromptChar属性外,MaskedTextBox控件还有一些其他有用的属性,例如InsertKeyMode属性和HidePromptOnLeave属性,它们可以帮助您控制控件的行为。

1.属性介绍

1.1 AllowPromptAsInput

AllowPromptAsInput属性是MaskedTextBox控件的一个属性,用于指定是否将PromptChar字符视为可输入的字符。默认情况下,如果用户尝试输入PromptChar字符,控件会忽略它并跳过到下一个有效字符。

当设置AllowPromptAsInput为true时,PromptChar字符将被视为可输入的字符,这意味着用户可以输入任何字符,包括PromptChar字符。这对于某些输入格式可能会有用,例如在电话号码中允许用户输入括号或破折号等符号。

以下是AllowPromptAsInput属性的使用示例:

private void Form1_Load(object sender, EventArgs e)
{
    
    
    maskedTextBox1.Mask = "(999) 000-0000";
    maskedTextBox1.PromptChar = '_';
    maskedTextBox1.AllowPromptAsInput = true;
}

在这里插入图片描述

在上面的代码中,我们指定了一个电话号码格式,并将PromptChar属性设置为"_"。我们还将AllowPromptAsInput属性设置为true,允许用户输入PromptChar字符。这样,如果用户想在电话号码中输入括号或破折号等符号,可以直接输入它们,而不被忽略。

请注意,启用AllowPromptAsInput属性可能会导致控件接受一些无效的输入,并且如果不正确地使用,可能会破坏指定的输入格式。因此,需要小心使用该属性。

1.2 AsciiOnly

MaskedTextBox控件的AsciiOnly属性是用来限制用户在输入框中输入的字符必须是ASCII字符。这个属性对于需要输入非ASCII字符的情况并不适用。

如果你想让用户只能输入ASCII字符,可以通过以下步骤使用AsciiOnly属性:

  1. 将一个MaskedTextBox控件添加到你的窗体上。

  2. 在属性窗口中找到AsciiOnly属性,将其值设置为True。

  3. 运行程序并在MaskedTextBox中输入任何非ASCII字符。你会发现输入无效,文本框中不会显示任何非ASCII字符。

1.3 BeepOnError

MaskedTextBox控件是Winform中的一种输入控件,可以对输入内容进行格式化和验证。BeepOnError属性是MaskedTextBox控件的一个属性,用于在输入错误时发出蜂鸣声。

当BeepOnError属性设置为True时,如果用户输入的内容不符合指定的格式,MaskedTextBox将会发出蜂鸣声提示用户输入错误。如果设置为False,则不会发出提示声音。

下面是一个示例:

// 创建一个MaskedTextBox控件
MaskedTextBox maskedTextBox1 = new MaskedTextBox();

// 设置掩码格式
maskedTextBox1.Mask = "0000-00-00";

// 设置BeepOnError属性
maskedTextBox1.BeepOnError = true;

在这里插入图片描述

在上面的示例中,设置了MaskedTextBox的掩码格式为"0000-00-00",即用户只能输入4位数字、一个连字符、2位数字、又一个连字符、2位数字。如果用户输入的内容不符合这样的格式,MaskedTextBox将会发出蜂鸣声提示用户输入错误。

1.4 CutCopyMaskFormat

MaskedTextBox控件的CutCopyMaskFormat属性用于指定复制或剪切操作时所使用的文本格式。

该属性有三个可选值:

  1. MaskFormat:复制或剪切操作将使用掩码格式。即只复制或剪切输入控件中的实际文本,不包括掩码字符。

  2. IncludeLiterals:复制或剪切操作将使用包含文字的掩码格式,包括掩码字符。

  3. ExcludePromptAndLiterals:复制或剪切操作将使用不包含提示符和文字的掩码格式,只复制或剪切输入控件中的实际文本,不包括掩码字符和提示符。

使用示例:

假设MaskedTextBox控件的Mask属性设置为"(999) 000-0000",即电话号码格式。则:

  1. 若CutCopyMaskFormat属性设置为MaskFormat,则复制文本"1234567890"将得到拷贝结果"(123) 456-7890",不包括掩码字符。

  2. 若CutCopyMaskFormat属性设置为IncludeLiterals,则复制文本"1234567890"将得到拷贝结果"(999) 123-4567",包括掩码字符。

  3. 若CutCopyMaskFormat属性设置为ExcludePromptAndLiterals,则复制文本"1234567890"将得到拷贝结果"1234567890",不包括掩码字符和提示符。

1.5 HidePromptOnLeave

HidePromptOnLeave属性是MaskedTextBox控件的一个属性,它设置为true时,当焦点离开该控件时,掩码提示字符将隐藏,仅显示输入的文本。设置为false时,当焦点离开控件时,掩码提示字符将保留。

例如,当掩码输入为手机号码时,如果设置HidePromptOnLeave属性为true,用户在输入完11位手机号码后,离开控件时,该控件只会显示输入的11位数字,并且掩码提示字符将不再显示。如果设置为false,则在用户离开控件时,掩码提示字符将继续显示,以便用户知道当前输入的数字的位置。

使用方法如下:

  1. 在Winform窗体中添加一个MaskedTextBox控件。

  2. 在属性窗口中找到HidePromptOnLeave属性,将其设置为true或false。

  3. 在代码中使用该控件时,可以通过该控件的HidePromptOnLeave属性来控制掩码提示字符的显示。

1.6 HideSelection

MaskedTextBox控件HideSelection属性用于设置当控件失去焦点或不再是活动控件时,所选内容是否隐藏。

当HideSelection属性设置为true时,表示控件失去焦点或不再是活动控件时,所选内容将隐藏。

当HideSelection属性设置为false时,表示控件失去焦点或不再是活动控件时,所选内容将保持选中状态并用反色高亮显示。

示例代码:

//设置HideSelection属性为true
maskedTextBox1.HideSelection = true;

//设置HideSelection属性为false
maskedTextBox1.HideSelection = false;

注意:当MaskedTextBox控件的ReadOnly属性设置为true时,无论HideSelection属性设置为true或false,所选内容都将保持选中状态并用反色高亮显示。

1.7 ImeMode

MaskedTextBox控件的ImeMode属性用于设置控件的输入法模式。输入法模式可以影响输入法在控件中的显示方式。

ImeMode属性的取值如下:

  • Alpha:普通的输入法模式,适用于输入字母、数字和符号等。
  • Kana:仅适用于日语输入法,用于输入平假名和片假名。
  • Hangul:仅适用于韩语输入法,用于输入韩文。
  • Hiragana:仅适用于日语输入法,用于输入平假名。
  • Katakana:仅适用于日语输入法,用于输入片假名。
  • NoControl:禁用输入法。
  • Off:输入法不可用。
  • On:默认的输入法模式,适用于输入任何字符。

例如,如果要在MaskedTextBox控件中只允许输入汉字,可以将ImeMode属性设置为ImeMode.Hangul。

在设计时,可以在属性窗口中直接设置ImeMode属性;在运行时,可以通过代码设置ImeMode属性,如下所示:

maskedTextBox1.ImeMode = ImeMode.Hangul;

1.8 InsertKeyMode

MaskedTextBox控件的InsertKeyMode属性用于设置插入键的模式,决定了插入键的行为。

InsertKeyMode属性有两个可选值:

  1. InsertMode:按下插入键时,当前光标位置将从该位置开始向后覆盖字符。

  2. OverwriteMode:按下插入键时,当前光标位置将覆盖光标下的字符。

要使用InsertKeyMode属性,在设计时或者代码中都可以进行设置。在设计时,可以在属性窗口中找到InsertKeyMode属性并选择需要的模式。在代码中,可以通过以下方式进行设置:

maskedTextBox1.InsertKeyMode = InsertKeyMode.OverwriteMode;

需要注意的是,如果MaskedTextBox控件的Mask属性中包含了任何占位符,那么InsertKeyMode属性将失效,只能以覆盖模式进行输入。

1.9 Mask

MaskedTextBox控件是Winform中的一个文本框控件,它具有使用Mask属性的特殊功能。Mask属性允许您为输入设置特定的格式,这可以帮助用户更快地输入数据,并保证数据的格式正确性。

以下是一些使用MaskedTextBox控件的示例:

1.日期格式

MaskedTextBox控件可以使用日期格式掩码,例如 “00/00/0000”,它可以强制用户在输入日期时保持一定的格式。如果用户尝试输入与格式不匹配的值,控件会自动拒绝该输入。

2.电话号码格式

您可以使用格式掩码创建电话号码格式,例如 “(000) 000-0000”。这将使用户能够更容易地输入电话号码,并将电话号码自动格式化为指定的格式。

3.邮政编码格式

MaskedTexBox控件还可以使用邮政编码格式掩码,例如 “00000-0000”。这可以确保用户输入正确的邮政编码,同时保持一致的格式。

通过使用掩码,MaskedTextBox控件可以使用户更轻松地输入数据,并且可以确保输入数据的格式正确性。

1.10 PasswordChar

MaskedTextBox控件是Windows Forms中的一个文本框控件,可以提供掩码,例如日期,时间,电话号码等。PasswordChar属性是掩码文本框中用于掩盖用户输入文本的字符。

当需要输入密码时,可以将MaskedTextBox控件的PasswordChar属性设置为任何字符来掩盖输入的文本,例如:

// 设置掩码文本框的PasswordChar属性为'*'
maskedTextBox1.PasswordChar = '*';

在上述代码示例中,将PasswordChar属性设置为星号(*)字符,用户输入的文本将被掩盖。

需要注意的是,设置PasswordChar属性不会自动将MaskedTextBox控件中输入的文本转换为密码,仍需要开发人员手动加密密码文本。

1.11 PromptChar

MaskedTextBox控件是一种用于输入格式化字符串的控件。 PromptChar属性是用于设置掩码中未输入字符的占位符,通常情况下默认是下划线“_”。

例如,如果您设置了一个电话号码的掩码“(000) 000-0000”,并且PromptChar属性设置为“X”,那么如果用户只输入了前三个数字“123”,它将自动填充为“(123) XXX-XXXX”。

您可以根据需要将PromptChar属性设置为任何字符,例如“”,“#”等。例如,如果您希望掩码中的未输入字符以星号“”表示,您可以将PromptChar属性设置为“*”。

下面是一个简单的例子:

// 设置掩码
maskedTextBox1.Mask = "000-000-0000";
// 设置PromptChar
maskedTextBox1.PromptChar = '*';

在这里插入图片描述

1.12 RejectInputOnFirstFailure

MaskedTextBox控件的RejectInputOnFirstFailure属性用于控制用户输入是否被拒绝。当该属性设置为true时,如果用户输入的字符不符合掩码规则,则控件会拒绝该输入并显示之前的合法输入值,即使用户还没有完成输入。当该属性设置为false时,用户可以继续输入直到输入完整个掩码规则或手动清除输入。默认情况下,该属性为true。

以下代码演示了如何使用RejectInputOnFirstFailure属性:

MaskedTextBox maskedTextBox = new MaskedTextBox();
maskedTextBox.Mask = "00/00/0000";
maskedTextBox.RejectInputOnFirstFailure = true;

在上面的示例中,创建了一个掩码为"00/00/0000"的MaskedTextBox控件,并将其RejectInputOnFirstFailure属性设置为true。这样,用户输入的字符如果不符合掩码规则,将会被拒绝并显示之前的合法输入值。

1.13 ResetOnPrompt、ResetOnSpace

MaskedTextBox控件是Windows Form中用于输入特定格式文本的控件。ResetOnPrompt和ResetOnSpace是其两个重要属性。下面我来介绍一下这两个属性的用法:

  1. ResetOnPrompt属性

当ResetOnPrompt属性设置为true时,在输入控件中的有效字符之后,如果用户键入掩码提示字符,将自动清除输入。例如,当你设置了MaskedTextBox的掩码为"000-00-0000"(社会安全号码),ResetOnPrompt属性为true时,如果用户输入了"123-45",然后在"-“之后输入了一个掩码提示字符”_",所有输入的内容都将被清除,因为这不符合预期的输入。

  1. ResetOnSpace属性

当ResetOnSpace属性设置为true时,在输入控件中的有效字符之后,如果用户键入了空格,则自动清除输入。例如,当你设置了MaskedTextBox的掩码为"00/00/0000"(日期),ResetOnSpace属性为true时,如果用户在第一个"00"之后输入了一个空格,则所有输入的内容都将被清除,因为这不符合预期的输入。

总的来说,ResetOnPrompt和ResetOnSpace属性可以帮助你确保用户输入掩码所指定的格式的正确性,提高数据输入的准确性。

1.14 ShortcutsEnabled

MaskedTextBox控件的ShortcutsEnabled属性用于控制是否启用系统快捷键。默认情况下,该属性值为true,即启用系统快捷键。

当该属性值为true时,以下系统快捷键将可用:

  • Ctrl+C:复制
  • Ctrl+X:剪切
  • Ctrl+V:粘贴
  • Ctrl+A:全选
  • Ctrl+Z:撤销
  • Ctrl+Y:重做

如果你需要禁用这些系统快捷键,你可以将该属性设置为false。这样,用户将无法使用快捷键对文本框中的内容进行操作。

1.15 SkipLiterals

MaskedTextBox控件的SkipLiterals属性表示是否跳过掩码中的字面值(literals)。字面值是指掩码中的非空格字符,它们表示文本框中必须包含的固定文本。例如,如果掩码为"000-00-0000",那么"-"就是一个字面值。

如果SkipLiterals属性设置为true,则文本框中只有掩码中未被标记为字面值的部分才会显示。在上面的例子中,输入"123456789"将显示为"123-45-6789"。

如果SkipLiterals属性设置为false(默认值),则文本框将显示完整的掩码,并且字面值将以它们在掩码中出现的方式显示。在上面的例子中,输入"123456789"将显示为"123-456-789"。

需要注意的是,SkipLiterals属性只影响文本框的显示,而不影响文本框中实际保存的值。无论SkipLiterals属性的值如何,文本框中的值都将是掩码中指定的格式,包括字面值和空格。

1.16 TextMaskFormat

MaskedTextBox控件是一种用于输入格式化文本的Windows窗体控件。它允许您设置输入文本的格式,例如电话号码、邮政编码、日期等。

TextMaskFormat属性是MaskedTextBox控件的一个属性,它决定了控件中输入的文本是否包括掩码字符。

该属性有两个枚举值:

  1. Mask: 输入的文本包括掩码字符,例如输入电话号码时,掩码字符为括号和短横线。

  2. ExcludePromptAndLiterals: 输入的文本不包括掩码字符,例如输入电话号码时,只包括数字字符。

默认值为Mask。

以下是一个简单的示例,演示如何使用TextMaskFormat属性:

//设置掩码格式
maskedTextBox1.Mask = "(999) 000-0000";

//设置TextMaskFormat属性为ExcludePromptAndLiterals(输入的文本不包括掩码字符)
maskedTextBox1.TextMaskFormat = MaskFormat.ExcludePromptAndLiterals;

在上面的示例中,我们设置了MaskedTextBox控件的掩码格式为“(999) 000-0000”,然后将TextMaskFormat属性设置为ExcludePromptAndLiterals,这意味着输入的文本不包含掩码字符。

1.17 UseSystemPasswordChar

MaskedTextBox控件是Winform中常用的一个控件,用于输入带有掩码的文本。其中,UseSystemPasswordChar属性用于显示输入的字符是否为密码字符。如果设置为true,则控件会使用系统默认的密码字符来隐藏输入内容,否则控件会使用自定义的密码字符来隐藏输入内容。

默认情况下,MaskedTextBox控件的UseSystemPasswordChar属性是false,即使用自定义的密码字符来隐藏输入内容。这个自定义的密码字符可以通过控件的PasswordChar属性来设置,通常情况下我们会将其设置为"*"。

如果我们想要使用系统默认的密码字符来隐藏输入内容,就需要将UseSystemPasswordChar属性设置为true。这时,控件会自动使用系统默认的密码字符来隐藏输入内容,而无需再设置PasswordChar属性。

需要注意的是,不同的操作系统可能使用的密码字符不同,因此在设置UseSystemPasswordChar属性时需要考虑到跨平台兼容性。

2.常用场景

MaskedTextBox 控件常用于需要对输入文本格式进行限制和控制的场景,比如:

  1. 日期和时间输入:可以通过设定日期格式等限制用户输入的日期和时间格式。

  2. 电话号码输入:可以通过设置电话号码格式(如(999)999-9999)限制用户输入的电话号码格式。

  3. 邮政编码输入:同样可以通过设定格式限制用户输入的邮政编码格式。

  4. 身份证号码输入:可以通过设置身份证号码格式限制用户输入的身份证号码格式。

  5. 数字输入:可以通过设定数字格式限制用户只能输入数字。

  6. 其他特定格式输入:比如 IP 地址、MAC 地址等。

3.具体案例

假设我们需要让用户输入一个有效的日期,我们可以使用 MaskedTextBox 控件来限制用户只能输入符合指定格式的日期。

首先,在 Visual Studio 中创建一个 Winform 应用程序,并在窗体中添加一个 MaskedTextBox 控件和一个按钮控件。

接着,在 MaskedTextBox 的属性窗口中,将 Mask 属性设置为 “00/00/0000”,TextMaskFormat 属性设置为 “IncludeLiterals”,SkipLiterals 属性设置为 “False”,表示包含掩码字符,忽略字面值字符。

在按钮的 Click 事件中添加以下代码:

private void btnSubmit_Click(object sender, EventArgs e)
{
    
    
    DateTime inputDate;
    if (DateTime.TryParseExact(maskedTextBox1.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out inputDate))
    {
    
    
        MessageBox.Show("输入的日期为:" + inputDate.ToString("dd/MM/yyyy"));
    }
    else
    {
    
    
        MessageBox.Show("请输入有效的日期");
    }
}

以上代码会将用户输入的日期字符串转换为 DateTime 类型,如果可以成功转换,则弹出消息框显示转换后的日期,否则提示用户输入有效的日期。

最后,运行程序,输入一个有效的日期(比如 01/01/2021),点击提交按钮,即可看到转换后的日期信息。

完整代码如下:

using System;
using System.Globalization;
using System.Windows.Forms;

namespace MaskedTextBoxDemo
{
    
    
    public partial class Form1 : Form
    {
    
    
        public Form1()
        {
    
    
            InitializeComponent();
        }

        private void btnSubmit_Click(object sender, EventArgs e)
        {
    
    
            DateTime inputDate;
            if (DateTime.TryParseExact(maskedTextBox1.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out inputDate))
            {
    
    
                MessageBox.Show("输入的日期为:" + inputDate.ToString("dd/MM/yyyy"));
            }
            else
            {
    
    
                MessageBox.Show("请输入有效的日期");
            }
        }
    }
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/aa2528877987/article/details/132869197