此函数检查文本框中的值是否可解析。在下面的方法中调用此方法。
private bool CheckForInvalidEntries()
{
bool ParseIsSuccessfull; int result; //These 2 variables are for trying to parse the entries in the Stat text boxes
bool ContainsInvalidEntry = false;
if ((ParseIsSuccessfull = int.TryParse(P1STRtextbox.Text, out result)) == false)
{
ContainsInvalidEntry = true;
}
else if ((ParseIsSuccessfull = int.TryParse(P1DEXtextbox.Text, out result)) == false)
{
ContainsInvalidEntry = true;
}
else if ((ParseIsSuccessfull = int.TryParse(P1VIGtextbox.Text, out result)) == false)
{
ContainsInvalidEntry = true;
}
else if ((ParseIsSuccessfull = int.TryParse(P1RMtextbox.Text, out result)) == false)
{
ContainsInvalidEntry = true;
}
else if ((ParseIsSuccessfull = int.TryParse(P1BMtextbox.Text, out result)) == false)
{
ContainsInvalidEntry = true;
}
else ContainsInvalidEntry = false;
return ContainsInvalidEntry;
}
此功能是单击过程统计点按钮的事件
private void p1ProcessPointsBtn_Click(object sender, EventArgs e)
{
bool EntriesAreInvalid = new bool();
EntriesAreInvalid = CheckForInvalidEntries();
if (EntriesAreInvalid == true)
{
P1STRtextbox_TextChanged(sender, e);
P1DEXtextbox_TextChanged(sender, e);
P1VIGtextbox_TextChanged(sender, e);
P1RMtextbox_TextChanged(sender, e);
P1BMtextbox_TextChanged(sender, e);
}
else
{
MessageBox.Show("Success");
}
功能:当用户按下“处理统计点”按钮时,程序会检查是否能够解析5个文本框中的条目(在CheckForInvalidEntries方法中)。然后它将bool值返回到EntriesAreInvalid变量(在p1ProcessPointsBtn_Click方法中)。如果条目不可解析,请执行操作A,如果条目是可解析的,请执行操作B.
问题:如果这些数字在所有文本框中都是可分析的,我就不会得到结果。我只得到文本框不可解析的结果。我认为它与“CheckForInvalidEntries”方法中的if语句有关。我该怎么做才能解决我的问题。非常感谢您的时间和精力!
答案 0 :(得分:1)
如果转换失败,TryParse会将Result设置为零。由于您一直在调用TryParse,因此请继续重置结果。
如果您只想检查解析错误,这应该有效:
ContainsInvalidEntry = false;
ContainsInvalidEntry |= !int.TryParse(P1STRtextbox.Text, out result));
ContainsInvalidEntry |= !int.TryParse(P1DEXtextbox.Text, out result));
ContainsInvalidEntry |= !int.TryParse(P1VIGtextbox.Text, out result));
ContainsInvalidEntry |= !int.TryParse(P1RMtextbox.Text, out result));
ContainsInvalidEntry |= !int.TryParse(P1BMtextbox.Text, out result));
return ContainsInvalidEntry;
除此之外:比较布尔值为true和false有点(请原谅双关语。)奇怪。 if ( ( ParsedOkay == ( false ) ) )
可能有效,但if ( !ParsedOkay )
更为常见。
答案 1 :(得分:1)
我对你的代码感到困惑。但我认为这会对你有所帮助。如果我说得对,你想检查文本框中的所有文本是否可以解析为int。如果它是这样你想打印出“成功”;
private bool isParsable(TextBox t) //takes a TextBox as paramater and returns true if
{ // its parsable
int i = 4;
if (int.TryParse(t.Text, out i) == true)
return true;
else
return false;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
if(isParsable(tbox1) == true && isParsable(tbox2) == true) //if every textbox
{ //is parsable print
tblock1.Text = "succes";
}
else
{
tblock1.Text = "error";
}
}
答案 2 :(得分:0)
首先,你不需要写这样的if语句,它太杂乱而且没必要。复杂的代码总是容易出错,
而不是:
if ((ParseIsSuccessfull = int.TryParse(P1STRtextbox.Text, out result)) == false)
你可以写:
if(!int.TryParse(P1STRtextbox.Text, out result))
因为TryParse已经返回了一个bool结果。如果你想检查它是否为假只是把你的语句开头的否定运算符(!)。您还可以编写一个简单的方法来检查您的文本是否可以解析:
static bool CheckForParse(params string[] values)
{
int x;
if(values.Lenght > 0)
{
for(int i=0; i<values.Lenght;i++)
{
if(!int.TryParse(values[i], x)) return false;
}
return true;
} else { return false }
return false;
}
你可以这样称呼它:
bool result = CheckForParse(P1STRtextbox.Text,
P1DEXtextbox.Text,
P1VIGtextbox.Text,
P1RMtextbox.Text,
P1BMtextbox.Text);
if(result)
{
P1STRtextbox_TextChanged(sender, e);
P1DEXtextbox_TextChanged(sender, e);
...
}