【问题标题】:TextBox accepts only intTextBox 只接受 int
【发布时间】:2016-02-18 23:17:42
【问题描述】:

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

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;

【问题讨论】:

  • 显示分配图表间隔的事件。 @Shaharyar 链接将帮助您完成角色部分,但由于您也关心退格,因此您必须在分配事件中验证这一点
  • 当我单击按钮绘制图形时发生的事件。因此,当我更改轴间隔并单击按钮时,它可以正常工作。我该如何验证?
  • @uzi42tmp 问题是您输入的不是int,而是通过一个未经处理的FormatException 这意味着它无法将该值解析为int
  • 您说程序在输入字符后立即崩溃,所以我认为该事件一直在运行。那么 shaharyar 是对的,您可以在他的链接中得到答案。

标签: c# winforms textbox


【解决方案1】:

x_axis_num = Convert.ToInt32(xAxisBox.Text, usC); 行中,您正在获取文本框中的任何内容并尝试将其转换为整数值。

你觉得“嘿,我不是数字!”的转换是什么?会做?它会严重崩溃,主要是因为该文本不是,也永远不会是数字。

相反,您可以使用Int.TryParse 方法,该方法将接受任何文本并尝试将其转换为数字。

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

例子:

int number;

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

如果转换成功,则 number 有值,否则,结果为 false 则执行以下操作:

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;    
}

【讨论】:

  • 他告诉我 TryParse 方法在我这样写时没有合法值 - 编辑:sry 有错误
  • 你建议他在什么情况下放置这个?
  • 我会说 x 轴和 y 轴事件?还是我错了?我在“xAxisBox.Text = number;”中遇到另一个错误- 他告诉我无法将 int 转换为字符串。
  • @uzi42tmp 你是对的,当我将它分配给文本属性时,我在数字上缺少了一个 ToString。我更新了答案。
  • 等一下!现在他没有加载值!当我单击按钮更改轴时,他什么也不做:/
猜你喜欢
  • 1970-01-01
  • 2016-07-26
  • 1970-01-01
  • 2012-01-09
  • 1970-01-01
  • 2012-09-15
  • 1970-01-01
  • 1970-01-01
  • 2012-07-06
相关资源
最近更新 更多