【愚公系列】2023年11月 Winform控件专题 MaskedTextBox控件详解
🏆 作者简介,愚公搬代码
🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,阿里云专家博主,腾讯云优秀博主,掘金优秀博主,51CTO博客专家等。
🏆《近期荣誉》:2022年CSDN博客之星TOP2,2022年华为云十佳博主等。
🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
🏆🎉欢迎 👍点赞✍评论⭐收藏
🚀前言
Winform控件是Windows Forms中的用户界面元素,它们可以用于创建Windows应用程序的各种视觉和交互组件,例如按钮、标签、文本框、下拉列表框、复选框、单选框、进度条等。开发人员可以使用Winform控件来构建用户界面并响应用户的操作行为,从而创建功能强大的桌面应用程序。
🚀一、MaskedTextBox控件详解
MaskedTextBox控件是Winform中的一个文本框控件,用于限制用户输入的格式。它允许您指定输入格式并自动格式化输入。例如,您可以使用它来限制日期输入的格式或电话号码的格式等。
MaskedTextBox控件有一个Mask属性,在该属性中您可以设置输入限制。以下是一些常用的输入格式:
-
日期格式:设置Mask属性为"00/00/0000",将文本框限制为日期格式,如"01/01/2000"。
-
时间格式:设置Mask属性为"00:00",将文本框限制为时间格式,如"12:30"。
-
电话号码格式:设置Mask属性为"(999) 000-0000",将文本框限制为电话号码格式,如"(123) 456-7890"。
-
邮编格式:设置Mask属性为"00000",将文本框限制为邮编格式,如"12345"。
-
自定义格式:您可以使用单个字符(如"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属性:
-
将一个MaskedTextBox控件添加到你的窗体上。
-
在属性窗口中找到AsciiOnly属性,将其值设置为True。
-
运行程序并在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属性用于指定复制或剪切操作时所使用的文本格式。
该属性有三个可选值:
-
MaskFormat:复制或剪切操作将使用掩码格式。即只复制或剪切输入控件中的实际文本,不包括掩码字符。
-
IncludeLiterals:复制或剪切操作将使用包含文字的掩码格式,包括掩码字符。
-
ExcludePromptAndLiterals:复制或剪切操作将使用不包含提示符和文字的掩码格式,只复制或剪切输入控件中的实际文本,不包括掩码字符和提示符。
使用示例:
假设MaskedTextBox控件的Mask属性设置为"(999) 000-0000",即电话号码格式。则:
-
若CutCopyMaskFormat属性设置为MaskFormat,则复制文本"1234567890"将得到拷贝结果"(123) 456-7890",不包括掩码字符。
-
若CutCopyMaskFormat属性设置为IncludeLiterals,则复制文本"1234567890"将得到拷贝结果"(999) 123-4567",包括掩码字符。
-
若CutCopyMaskFormat属性设置为ExcludePromptAndLiterals,则复制文本"1234567890"将得到拷贝结果"1234567890",不包括掩码字符和提示符。
🦋1.5 HidePromptOnLeave
HidePromptOnLeave属性是MaskedTextBox控件的一个属性,它设置为true时,当焦点离开该控件时,掩码提示字符将隐藏,仅显示输入的文本。设置为false时,当焦点离开控件时,掩码提示字符将保留。
例如,当掩码输入为手机号码时,如果设置HidePromptOnLeave属性为true,用户在输入完11位手机号码后,离开控件时,该控件只会显示输入的11位数字,并且掩码提示字符将不再显示。如果设置为false,则在用户离开控件时,掩码提示字符将继续显示,以便用户知道当前输入的数字的位置。
使用方法如下:
-
在Winform窗体中添加一个MaskedTextBox控件。
-
在属性窗口中找到HidePromptOnLeave属性,将其设置为true或false。
-
在代码中使用该控件时,可以通过该控件的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属性有两个可选值:
-
InsertMode:按下插入键时,当前光标位置将从该位置开始向后覆盖字符。
-
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是其两个重要属性。下面我来介绍一下这两个属性的用法:
- ResetOnPrompt属性
当ResetOnPrompt属性设置为true时,在输入控件中的有效字符之后,如果用户键入掩码提示字符,将自动清除输入。例如,当你设置了MaskedTextBox的掩码为"000-00-0000"(社会安全号码),ResetOnPrompt属性为true时,如果用户输入了"123-45",然后在"-“之后输入了一个掩码提示字符”_",所有输入的内容都将被清除,因为这不符合预期的输入。
- 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控件的一个属性,它决定了控件中输入的文本是否包括掩码字符。
该属性有两个枚举值:
-
Mask: 输入的文本包括掩码字符,例如输入电话号码时,掩码字符为括号和短横线。
-
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 控件常用于需要对输入文本格式进行限制和控制的场景,比如:
-
日期和时间输入:可以通过设定日期格式等限制用户输入的日期和时间格式。
-
电话号码输入:可以通过设置电话号码格式(如(999)999-9999)限制用户输入的电话号码格式。
-
邮政编码输入:同样可以通过设定格式限制用户输入的邮政编码格式。
-
身份证号码输入:可以通过设置身份证号码格式限制用户输入的身份证号码格式。
-
数字输入:可以通过设定数字格式限制用户只能输入数字。
-
其他特定格式输入:比如 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("请输入有效的日期");
}
}
}
}
🚀感谢:给读者的一封信
亲爱的读者,
我在这篇文章中投入了大量的心血和时间,希望为您提供有价值的内容。这篇文章包含了深入的研究和个人经验,我相信这些信息对您非常有帮助。
如果您觉得这篇文章对您有所帮助,我诚恳地请求您考虑赞赏1元钱的支持。这个金额不会对您的财务状况造成负担,但它会对我继续创作高质量的内容产生积极的影响。
我之所以写这篇文章,是因为我热爱分享有用的知识和见解。您的支持将帮助我继续这个使命,也鼓励我花更多的时间和精力创作更多有价值的内容。
如果您愿意支持我的创作,请扫描下面二维码,您的支持将不胜感激。同时,如果您有任何反馈或建议,也欢迎与我分享。
![在这里插入图片描述](https://img-blog.csdnimg.cn/e06a317e89694a23ad89d2c59538c3a1.jpeg#pic_center =450x300)
再次感谢您的阅读和支持!
最诚挚的问候, “愚公搬代码”
- 点赞
- 收藏
- 关注作者
评论(0)