我使用下面的Property示例对textbox
进行一些计算,如果textbox为null,我给它分配零,这样计算就不会失败,因为你可以看到我正在使用Math.Round
和我想要对这些textbox
输入进行多次检查,例如
仅接受我搜索过的数字的文本框,找到方法1
我希望我的文本框格式化我搜索并找到方法2
现在我的问题是......
有没有办法在我使用的属性方法中mareg所有这些方法 所以我的代码不会像“意大利面条代码”?
有没有更好的方法来进行这些检查?
提前谢谢
属性示例
public double ItemPriceResult
{
get
{
return Math.Round(ItemCost * RevenuePercentage / 100 + ItemCost, 0);
}
}
方法1
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (System.Text.RegularExpressions.Regex.IsMatch(textBox1.Text, "[^0-9]"))
{
MessageBox.Show("Please enter only numbers.");
textBox1.Text = textBox1.Text.Remove(textBox1.Text.Length - 1);
}
}
方法2
textBox1.Text = string.Format(System.Globalization.CultureInfo.GetCultureInfo("id-ID"), "{0:#,##0.00}", double.Parse(textBox1.Text));
在一些答案后更新
MaskedTextBox
似乎符合我的需要,我会阅读和搜索,并在一些问题下面
如果你愿意帮助我
我需要使用MaskedTextBox
,因为我可以将其设置为接受
号码和我也可以强制数字格式化
我还需要让数字文本框更易于为用户阅读
所以1000将会来1000 10000将来10000。
然后根据Microsoft Docs格式MaskedTextBox
来满足我的需求
屏蔽MaskedTextBox
999,999,999
,
第二我不希望PromptChar
显示我谷歌它但没有搜索结果这样做
答案 0 :(得分:1)
试试这个,它只接受数字,你可以使用正则表达式格式化字符串。
public static string ToMaskedString(this String value)
{
var pattern = "^(/d{2})(/d{3})(/d*)$";
var regExp = new Regex(pattern);
return regExp.Replace(value, "$1-$2-$3");
}
答案 1 :(得分:1)
你有TextBox
。唉,你不知道你使用什么样的TextBox
。 System.Windows.Forms.TextBox? System.Web.UI.MobileControls.TextBox?
你写“如果文本框为空我给它指定零”。我假设你的意思是如果在文本框中没有输入任何文本,你会认为输入了0。
此外,您希望在文本更改时格式化文本框的输出。因此,当操作员输入文本时,您想要更改此文本?对于操作员来说这非常烦人。
您不希望操作员有义务以您想要的格式输入他的文本,从视觉上帮助他。为此,您可以使用课程MaskedTextBox
MaskedTextBox有一个属性Mask,强制操作员输入某种格式。我对你使用格式 {0:#,## 0.00} 所做的事情并不熟悉,但我假设你希望输出加倍为实数格式,小数点后用两位数当前文化中常见的小数点和千位分隔符。
通过设计者输入初始化组件:
this.maskedTextBox1.Mask = "99990.00";
添加文本更改后的:
private void maskedtextBox1_TextChanged(object sender, EventArgs e)
{
double enteredValue = 0.0; // value to use when empty text box
if (!String.IsNullOrEmpty(this.maskedtextBox1.Text))
{
enteredValue = double.Parse(maskedTextBox1.Text, myFormatProvider)
}
ProcessEnteredValue(enteredValue);
}
}
答案 2 :(得分:0)
编辑后,规格已更改。
在进入时不想显示任何视觉反馈的愿望是可以理解的。毕竟,该计划并不关心运营商是否输入1000
,1000.00
,甚至是1.0E3
。
MaskedTextBox
特别用于强制操作员以给定格式输入他的号码。由于这不是必需的,我的建议是使用TextBox
代替MaskedTextBox
。
但是,因为您可以让操作员以他想要的任何方式自由输入他的号码,包括复制粘贴,修复打字错误等等,您必须添加用户表达的可能性。他已完成输入号码的程序。
Windows UI中经常使用的方法是Button
。另一种可能性是enter button
。请注意,这在Windows中并不是真正的标准。这可能会让学习你的课程变得更加困难。
因此,在操作员通知他完成编辑并调用相应的事件函数后,您的代码可能是:
// Get the numberformat to use, use current culture, or your own format
private readonly IFormatProvider myNumberFormat = CultureInfo.CurrentCulture.NumberFormat
private void OperatorFinishedEditing(TextBox box)
{
// read the text and try to parse it to a double
// accepting all common formats of real numbers in the current culture
bool valueOk = true;
double resultValue = 0;
if (!String.IsNullOrEmpty(box.Text))
{
bool valueOk = Double.TryParse(box.Text, out resultValue);
}
if (valueOk)
{
box.Text = FormatResultValue(resultValue);
ProcessValue(resultValue);
}
else
{
ShowInputProblem();
}
}