Windows窗体 - 自定义MaskedTextBox

时间:2013-03-13 15:37:04

标签: c# winforms maskedtextbox

我需要使用MaskedTextBox的基本功能。我可以使用5位数的面具但是我想要改变的东西很少。现在这个盒子看起来像这样:

MaskedTextBox

有两件事我不喜欢。首先 - Prompt char是低位_。我删除了字段值以便将其保留为空(因为我希望它显示),但这会产生错误 - The property value is invalid。那么有没有办法摆脱这些下划线?第二 - 我将这个值用于我的一个整数类型的实体属性,所以我做了一个转换:

if (txtNumOfAreas.Text != "")
            {
                string temp = txtNumOfAreas.Text;
                bool result = Int32.TryParse(temp, out convertValue);
                if (result)
                {
                    entity.AreasCnt = convertValue;
                }
                else
                {
                    MessageBox.Show(Resources.ERROR_SAVE, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return false;
                }
            }
            else
            {
                entity.AreasCnt = null;
            }

除非有人决定进行实验并插入类似_1__5_之类的内容,否则转换失败,但是首先我希望能够一个接一个地写入数字。这也可能吗?

2 个答案:

答案 0 :(得分:3)

看起来你的MaskedEdit比处理你特定范围的问题更麻烦。使用的更好控制可能是NumericUpDown。

NumericUpDown的好处:

  • 没有下划线提示试图摆脱
  • 它只接受数字输入
  • 因此无需尝试转换该值。你将永远有一个整数
  • 设置最小值和最大值属性可为您提供自动数据输入验证
  • 提供多种数据输入模式:
    • 输入
    • 用鼠标点击向上/向下按钮
    • 使用键盘上/下
  • 如果您愿意,可以完全隐藏上/下按钮:C# WinForms numericUpDown control (removing the spin box)

答案 1 :(得分:2)

因此,要使_成为空格,您只需将掩码字符设置为单个空格即可。要解决转换错误,只需将AllowPromptAsInput属性设置为false,这样用户就无法真正得到类似示例的内容。