【问题标题】:Multiline mask for MaskedTextBoxMaskedTextBox 的多行掩码
【发布时间】:2013-11-22 08:52:52
【问题描述】:

我的 Winforms 应用程序中有一个MaskedTextBox。我需要一个多行掩码,f.e:

"999999\r\n
 999999\r\n
 999999\r\n
 00/00/0000"

我阅读了msdn documentation 并惊讶地发现没有“新行”或类似的东西。

我知道我可以编写自己的用户控件来解决这个问题,但是屏蔽文本框会是一个更简单的解决方案。 所以我有 2 个问题:有没有办法给面具添加一条新线? 如果没有,为什么控件支持多行 - 不是没用吗?

提前致谢

【问题讨论】:

  • 来自 msdn 文档:获取或设置一个值,该值指示这是否是多行文本框控件。 MaskedTextBox 不完全支持此属性。我建议你制作一个代表 4 个蒙版文本框的用户控件,瞧,你已经设置好了 - msdn.microsoft.com/en-us/library/… -
  • “不完全支持”...好吧,好吧。我会说它不起作用,应该隐藏但没关系。谢谢你。
  • 糟糕,这不是一个真正的解决方案:s
  • 请记住,此控件的目的(在非常特定的条件下接受字符)似乎与多行的含义相反。例如:在您的代码中,您需要一个只允许数字和“/”的掩码;应该如何理解多行字符?总是接受每个面具?如果您想设计一个只接受换行符(或除换行符之外的任何内容)的掩码怎么办?或者换个角度看:你见过多少接受换行的密码输入框?看来您将不得不创建自己的控件。

标签: c# winforms maskedtextbox


【解决方案1】:

为此,我将创建一个自定义控件,该控件将为每一行组合一组 MaskedTextBox 现在,根据需要,在另一个下一个具有恒定数量的 MaskedTextBox 的“哑”控件以及格式字符串的相应属性

public string Format1 {get;set;} 
public string Format2 {get;set;} 
public string FormatX {get;set;} 

或者创建一个“智能”版本,具有属性“LinesCount”等,当您设置为 5 时,它会添加 5 个 MaskedTextBox,并在左侧和右侧设置锚点(使整个控件可拉伸)

然后是属性

public List<string> Formats {get;set;}

每一行对应每个 MaskedTextBox

还有属性值

public List<X> Values 

每一行都对应于每个 MaskedTextBox.Value,其中 X 是我不记得它返回的类型。

你想要的控制越复杂、智能和有用的控制就越多,你需要编写的代码越多:)但可行

【讨论】:

  • 如果新行是一个值的一部分,那么您可能需要使用一个 MaskedTextBox 并对其重新编码以使用一些正则表达式等,或者可能只使用 TextBox 并编码总自定义验证
  • “使用文本框和代码自定义验证” - 我就是这样做的。我主要是惊讶微软没有删除或至少隐藏无用的属性,如 Multiline :) 我将此标记为答案,因为它有效。
  • 我很高兴能提供帮助。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-02
  • 2012-07-11
  • 2018-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多