我这个班级只强制数字字符
public class BsnValidationTriggerAction : TriggerAction<Entry>
{
private string _prevValue = string.Empty;
protected override void Invoke(Entry entry)
{
int n;
var isNumeric = int.TryParse(entry.Text, out n);
if (!string.IsNullOrWhiteSpace(entry.Text) && (entry.Text.Length > 9 || !isNumeric))
{
entry.Text = _prevValue;
return;
}
_prevValue = entry.Text;
}
}
但现在我需要知道如何实现这一点,只允许数字,信号( - 确切)和点......有人可以帮助我吗?
答案 0 :(得分:4)
您可以使用decimal.TryParse
方法。
var isDecimal = decimal.TryParse(entry.Text, out n);
此外,您不需要额外检查
string.IsNullOrWhiteSpace(entry.Text)
如果entry.Text
的值如此,则上述函数返回true
,那么decimal.TryParse
将为此值返回false。
话虽这么说,你的班级可以重构如下:
public class BsnValidationTriggerAction : TriggerAction<Entry>
{
private string _prevValue = string.Empty;
protected override void Invoke(Entry entry)
{
decimal n;
var isDecimal = decimal.TryParse(entry.Text, out n);
_prevValue = isDecimal ? entry.Text : _prevValue;
}
}
<强>更新强>
TryParse
方法存在重载,它还将数字的style和format provider作为参数。
public static bool TryParse(
string s,
NumberStyles style,
IFormatProvider provider,
out decimal result
)
您可以找到有关如何使用它的示例here。