65.9K
CodeProject 正在变化。 阅读更多。
Home

用于 C# 中付款金额输入的数字键盘

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.71/5 (5投票s)

2017年5月14日

CPOL

3分钟阅读

viewsIcon

21263

downloadIcon

1329

此数字键盘可帮助您在文本字段中输入付款金额

引言

对于最终用户来说,如果他们可以直接从数字键盘输入数字,并且自动应用货币格式,而不是输入小数点和数字,那就容易多了!

背景

在许多 PoS 软件应用程序(或类似环境)中,支付屏幕需要“支付金额输入”。支付值(货币)几乎总是包含小数点。因此,如果我们不处理小数点,而留给用户,则可能会(将会!)出现故障,例如用户输入多个小数点,或者只是在更改总金额的位置添加小数点(10.25 美元的付款变成 102.50 美元)。因此,您要么必须检查该值,要么在按键级别捕获它。更好的方法是在入口点管理它!

 

使用代码

在 Windows 窗体上添加按钮并构建您的“价格数字键盘”

Payment Coders - Price numeric kaypad

 

 

 

 

 

 

 

 

 

 

 

我使用了 4x4 的 TableLayoutPanel。

在键盘网格下方添加一个文本框,输出将放置在该文本框中。

我引入了一个公共字符串,它决定了我们的键盘将扮演什么角色

public string numberRole = "MONEY" ;

“Money”角色将为应用两位小数的支付值设置舞台。例如,如果金额是 10.25,我们将有以下内容

步骤 1: 0.01

步骤 2: 0.10

步骤 3: 1.02

步骤 4: 10.25

“DIGITS”角色会将我们的键盘简单地变成一个数字键盘,没有小数点。

我还控制小数点位数和小数位数(预设为 2)。

private void MakeAmount(string amountTxt)

是此代码中的关键角色。

 

private void MakeAmount(string amountTxt) { decimal meanWhile; txtValue.Text = txtValue.Text + amountTxt; if (txtValue.Text.Length == 1) { txtValue.Text = "0.0" + txtValue.Text; } if (txtValue.Text.Length > 4) { meanWhile = Convert.ToDecimal(txtValue.Text) * 10; txtValue.Text = meanWhile.ToString("G29"); } }

 

如您所见,取决于我们拥有的内容,小数点会移动。

 

对于每个数字,我们都有相同的过程

 

除了零,我们需要检查一些事情,所有其他的 Click 事件都类似

private void num2_Click(object sender, EventArgs e) { if (numberRole == "DIGITS") { txtValue.Text = txtValue.Text + "2" ; } else MakeAmount(num2.Text); }

对于零

private void num0_Click(object sender, EventArgs e) { decimal meanWhile; if (numberRole == "DIGITS") { txtValue.Text = txtValue.Text + "0"; } else { txtValue.Text = txtValue.Text + "0"; if (txtValue.Text.Length == 1) { txtValue.Text = "0.0" + txtValue.Text; } if (txtValue.Text.Length >= 4) { meanWhile = Convert.ToDecimal(txtValue.Text) * 10; txtValue.Text = meanWhile.ToString("G29"); } if (Convert.ToDecimal(txtValue.Text) < 1) { txtValue.Text = txtValue.Text + "0"; } if (txtValue.Text.IndexOf(".") < 0) { txtValue.Text = txtValue.Text + ".00"; } if (Convert.ToDecimal(txtValue.Text) > 1 && (txtValue.Text.Length - txtValue.Text.IndexOf(".") - 1 == 1)) { txtValue.Text = txtValue.Text + "0"; } } }

这是您调用价格数字键盘的方式

numberpad showNumber = new numberpad(); showNumber.numberRole = "MONEY";

如您所见,这需要“Money”格式。

如果您需要一个数字键盘,请使用“DIGITS”调用您的函数

numberpad showNumber = new numberpad(); showNumber.numberRole = "DIGITS";

© . All rights reserved.