首页 > 解决方案 > 文本框上的 C# 退格立即创建错误

问题描述

我正在创建一个事件,如果有人在文本框中输入内容,它将使用以下代码显示错误:

try
{
    dblCostSqFt = double.Parse(txtCost.Text);
}
catch
{
    MessageBox.Show("Error. You must enter valid numbers. Please correct.");
    txtCost.Select();
    return;
}

这个问题是,如果我输入一个退格键,它会立即抛出该错误消息,我想将它放到不会发生这种情况的地方。

标签: c#

解决方案


您在这里使用用户输入。因此我建议使用Double.TryParse()

  • 如果您有一个字符串,并且您希望它始终是一个双精度数(例如,如果某些 Web 服务正在给您一个字符串格式的双精度数),您将使用Double.Parse().

  • 如果您从用户那里收集输入,您通常会使用Double.TryParse(),因为它允许您更细粒度地控制用户输入无效输入时的情况。

您的代码将tryparse()是这样的:

if (!double.TryParse(txtCost.Text, out var dblCostSqFt))
{
    MessageBox.Show("Error. You must enter valid numbers. Please correct.");
    txtExample.Select(0, txtCost.Text.Length);
    return;
}

为了使示例完整并解决问题,可以简单地检查是否Text不是nullempty使用String.IsNullOrEmpty()制作整个代码:

// makes sure your app isn't crashing upon backspaces.
if(string.IsNullOrEmpty(textCost.Text))
{
    // Personally i'd indicate the user nothing is typed in (yet).
    return;
}
if (!double.TryParse(txtCost.Text, out var dblCostSqFt))
{
    // The user filled in something that can't be parse to doubles.
    MessageBox.Show("Error. You must enter valid numbers. Please correct.");
    txtExample.Select(0, txtCost.Text.Length);
    return;
}
// All is great; Do stuff with dblCostSqFt.

推荐阅读