在TextF中将字符串从TextBox转换为Number

时间:2015-11-10 06:41:20

标签: c# wpf string function parsing

我有一个带有四个文本框的应用程序。我希望用户能够在前三个文本框中输入值。第四个将给出结果(box1 + box2 + box3) / 3

我的文本框看起来像这样。

private void rBox_1_PreviewTextInput(object sender, TextCompositionEventArgs e)
    {
        CheckIsNumber(e);
    }

一个让用户只输入数字的功能。

private void CheckIsNumber (TextCompositionEventArgs e)
    {
        int result;

        if (!int.TryParse(e.Text, out result))
        {
            e.Handled = true;
        }
    }

问题是我不知道如何转换和存储int中每个文本框的值。 我创建了一个null int值来存储。在 public MainWindow()

int box1_value;

对于功能我做到了。

public static int GetNumber (string arg)
    {
        int number = Int32.Parse(arg);
        return number;
    }

当我尝试以这种方式应用此功能时,没有任何反应。程序不会启动,但没有错误。

public MainWindow()
    {
        InitializeComponent();
        int box1_value = GetNumber(rBox_1.Text);
    }

3 个答案:

答案 0 :(得分:2)

删除

int box1_value = GetNumber(rBox_1.Text);
来自mainwindow构造函数的

您正在将string.Empty值解析为int,编译器将在编译期间自动暂停。因此,你的尴尬错误。

创建一个名为Calculate的新函数来计算值

private void Calculate()
{
  if(string.IsNullOrEmpty(rBox_1.Text) ||
     string.IsNullOrEmpty(rBox_2.Text) || 
     string.IsNullOrEmpty(rBox_3.Text))
    return;

  var box1 = GetNumber(rBox_1.Text);
  var box2 = GetNumber(rBox_2.Text);
  var box3 = GetNumber(rBox_3.Text);

  rBox_4.Text = ((box1 + box2 + box3)/3).ToString();
}

您有两个选项可用于添加计算功能:

在每个rBox_1_PreviewTextInput函数中添加它,如下所示:

if(e.Handled)
{
  Calculate();
}

或创建一个按钮(名为button1)

private void button1_Click(object sender, EventArgs e)
{
  Calculate();
}

一些评论:为什么计算中的string.IsNUllOrEmpty? - >您的GetNumber函数不会捕获任何错误的字符串值,如Empty。或者你在GetNumber函数中使用tryparse,或者在进入函数之前捕获空值。

答案 1 :(得分:0)

尝试使用TryParse方法:

 int number = Int32.Parse(arg); /*Instead of this line in your code use below.*/

可能重复thread

答案 2 :(得分:0)

我建议您应该使用PreviewTextInput以这种方式向前3个测试框添加验证,您不必在c#代码中尝试解析int,并且可以减少代码中出错的可能性