【问题标题】:Textbox related Question: Validating Like it was a DatagridView Cell与文本框相关的问题:像 DatagridView 单元格一样进行验证
【发布时间】:2009-12-11 04:10:40
【问题描述】:
我需要验证一个文本框如下:
当用户从该文本框更改焦点时,我想显示格式正确的货币值,但不会丢失用户输入的真实值,因为我需要它用于以后的计算,如果是这种情况,以便以后编辑用户...
我可以这样做吗?我不想为此设置另一个变量,并且我记得 datagrid 视图上的“验证”(我认为)事件,它可以让您保留值并格式化该值,所以如果您必须更改或用于计算,您只需使用 VALUE 属性,为了显示,它使用 FORMATEDVALUE 属性...
我可以这样做吗?
谢谢!
【问题讨论】:
标签:
c#
windows
winforms
textbox
【解决方案1】:
定义一个函数来格式化用户输入的值并返回格式化的值。在文本框的 LostFocus 事件中,您可以接受用户输入的值并将其存储到变量中。然后,将变量值作为参数传递给函数。格式化您的值并将值返回到文本框。
private void textBox1_Leave(object sender, EventArgs e)
{
Int32 original_value = Convert.ToInt32(textBox1.Text);
textBox1.Text = Format(original_value).ToString();
//original_value still holds the value that the user entered.
//textbox holds the formated value.
}
public int Format(int a)
{
//code to format your input value
return a;
}
这样,您的变量将保存用户输入的实际值,并且文本框将显示格式化的值。这有帮助吗?
如果您根本不想使用另一个变量,那么您也许可以制作自己的类控件来继承文本框控件,或者只是获取源代码,然后使用类的 Override 属性。
this 可能会有所帮助。
【解决方案2】:
为什么不简单地为 onblur 事件提供一个事件处理程序,它通过删除所有非数字(小数点除外)字符来解析字符串,然后转换为小数,然后将其格式化为货币?
然后,当您需要该值时,只需再次解析它。没有必要将他们输入的内容和格式化的值分开。