我有一个带有四个文本框的应用程序。我希望用户能够在前三个文本框中输入值。第四个将给出结果(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);
}
答案 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,并且可以减少代码中出错的可能性