2014-11-05 62 views
0

我的文本框出现问题。我希望可以通过两个文本框在GUI中为图表手动设置x轴和y轴的间隔。这有效,但当我键入一个字符或当我键入一个int并删除它,程序立即崩溃,我得到一个System.FormatException(无需单击按钮接受更改)。我怎样才能解决它,只要输入不同的符号而不立即崩溃程序?我下面的代码:TextBox只接受int

public void textBox2_TextChanged(object sender, EventArgs e) 
{ 
    x_axis_num = Convert.ToInt32(xAxisBox.Text, usC); 
} 

private void yAxisBox_TextChanged(object sender, EventArgs e) 
{ 
    y_axis_num = Convert.ToInt32(yAxisBox.Text); 
} 

获取传递到另一个事件:

chart1.ChartAreas[0].AxisX.Interval = x_axis_num; 
chart1.ChartAreas[0].AxisY.Interval = y_axis_num; 
+1

的可能重复[我怎样使一个文本框,只接受数字?](http://stackoverflow.com/questions/463299/how-do-i-make-a-textbox-that-only-accepts-numbers) – Shaharyar 2014-11-05 06:50:26

+0

显示什么事件指定图表间隔。 @Shaharyar链接将帮助您处理角色部分,但由于您关注的是退格,所以您必须验证您的作业事件 – TheProvost 2014-11-05 06:50:55

+0

它是当我单击按钮绘制图形时发生的事件。所以当我改变轴的时间间隔,并点击按钮,它工作正常。我如何验证? – uzi42tmp 2014-11-05 06:53:48

回答

3

在行x_axis_num = Convert.ToInt32(xAxisBox.Text, usC);,你正在服用无论是在文本框,并尝试将其转换为一个整数值。

你认为“嘿,我不是数字!”的转换。会做?它会崩溃,主要是因为该文本不是,也不会是一个数字。

取而代之,您可以使用Int.TryParse方法,该方法将采取任何文本和TRY将其转换为数字。

如果转换成功,那就没问题了。如果不成功,那么您会在标记上得到一个false值,指示文本无法转换。

例子:

int number; 

bool result = Int32.TryParse(YourTextBox.Text, out number); 

如果转换成功,则数量值,否则,结果是假的所以做这样的事情,那么:

if(result) 
{ 
    xAxisBox.Text = number.ToString(); 
    x_axis_num = number; 
} 
else 
{ 
    xAxisBox.Text = string.Empty; 

    // Be careful here with what you set. 
    // This is the value you will set when the Text box has a non numeric value! 
    x_axis_num = 0;  
} 
+0

他告诉我TryParse方法没有合法的价值当我这样写 - 编辑:sry有一个错误 – uzi42tmp 2014-11-05 07:02:25

+0

在哪个事件你建议他把这个? – TheProvost 2014-11-05 07:06:05

+0

我想说的是x轴事件和Y轴事件?或者我错了? “xAxisBox.Text = number;”中出现另一个错误 - 他告诉我,int到string的转换是不可能的。 – uzi42tmp 2014-11-05 07:07:43