我正在构建一个将分数转换为百分比的应用程序。我希望如此,如果我编辑分数中的文本,它会刷新并重新计算百分比。此代码为什么会导致ArgumentOutOfRangeException?
当我测试它时,我第一次编辑它没有错误的分数,并且工作正常,但是第二次我改变了分数中的错误。我得到这个错误
类型System.ArgumentOutOfRangeException未处理的异常出现在mscorlib.dll
我能做些什么来解决这个问题?
我对C#相当陌生,所以如果可能的话,尽量贬低它。
其他信息:索引和长度必须引用位置的字符串中的“
这里是我到目前为止:
private void fractionNumerator_KeyPress(object sender, KeyPressEventArgs e)
{
if (!(char.IsNumber(e.KeyChar) || ((e.KeyChar) == Convert.ToChar(Keys.Back))))
{
e.Handled = true;
}
else
{
if (!((fractionNumerator.Text == "") && (fractionDenominator.Text == "")))
{
if ((e.KeyChar == Convert.ToChar(Keys.Back)))
{
string numer = (fractionNumerator.Text.Substring(0, (fractionNumerator.Text.Length) - 1));
string denom = (fractionDenominator.Text);
outputPercentage.Text = (((((Convert.ToDouble(numer)/Convert.ToDouble(denom)) * 100).ToString()).Substring(0, 6)) + "%");
}
else
{
string numer = ((fractionNumerator.Text) + e.KeyChar.ToString());
string denom = (fractionDenominator.Text);
outputPercentage.Text = (((Convert.ToDouble(numer)/Convert.ToDouble(denom)*100).ToString()).Substring(0, 6));
}
}
}
}
private void fractionDenominator_KeyPress(object sender, KeyPressEventArgs e)
{
if (!(char.IsNumber(e.KeyChar) || ((e.KeyChar) == Convert.ToChar(Keys.Back))))
{
e.Handled = true;
}
else
{
if (!((fractionNumerator.Text == "") && (fractionDenominator.Text == "")))
{
if ((e.KeyChar == Convert.ToChar(Keys.Back)))
{
string denom = (fractionDenominator.Text.Substring(0, (fractionDenominator.Text.Length) - 1));
string numer = (fractionNumerator.Text);
outputPercentage.Text = (((((Convert.ToDouble(numer)/Convert.ToDouble(denom)) * 100).ToString()).Substring(0, 6)) + "%");
}
else
{
string denom = ((fractionDenominator.Text) + e.KeyChar.ToString());
string numer = (fractionNumerator.Text);
outputPercentage.Text = (((Convert.ToDouble(numer)/Convert.ToDouble(denom) * 100).ToString()).Substring(0, 6));
}
}
}
}
你在哪条线上发生错误? –
我猜它是'Substring(0,6))',它以某种方式被调用的字符串少于6个字符。 –
这是'Substring'调用之一。停止使用Substring格式化双输出。使用格式说明符:http://msdn.microsoft.com/en-us/library/kfsatb94(v=vs.110).aspx –