C#textBox字符串类型 - >整数类型

时间:2015-02-23 00:57:20

标签: formatexception

String t = textBox1.Text;
         int a = int.Parse(t);
         if( a < 24)
         {
             MessageBox.Show("24 over.");
             textBox1.Clear();
         }
  

未处理的类型&#39; System.FormatException&#39;发生在   mscorlib.dll其他信息:输入字符串不正确   格式

如何将字符串类型值更改为整数类型值?

2 个答案:

答案 0 :(得分:0)

t必须是可解析为整数的字符串。根据运行时间,它不是。

您可以使用TryParse代码使代码更具弹性。像这样:

int a = 0;
if (!int.TryParse(t, out a))
{
    // input wasn't parseable to an integer, show a message perhaps?
}
// continue with your logic

答案 1 :(得分:0)

简短回答,使用Binding

为了构建示例,我将假设您未指定Winforms,但如果它是WPF则更正我。无论如何,基本原则完全相同。

我们的想法是将属性绑定到控件文本,该控件文本将直接从控件接收解析的编号。验证正确性将由绑定引擎完成,并且在出现错误时将提供可视线索,并且该属性可以安全地用于任何其他代码。

示例实现可能是这样的:

//Declare property that will hold the converted value
public int TextBoxValue { get; set; }

protected override void OnLoad()
{
    //Initialize databinding from the control Text property to this form TextBoxValue property
    this.Textbox1.DataBindings.Add("Text",this,"TextBoxValue");
}

private void Button1_Click(object sender, EventArgs e)
{
     //This is an example of usage of the bound data, analogous to your original code
     //Data is read directly from the property
     if(this.TextBoxValue < 24)
     {
         MessageBox.Show("24 over.");
         //To move changes back, simply set the property and raise a PropertyChanged event to signal binding to update
         this.TextBoxValue = 0;
         this.PropertyChanged(this,new PropertyChangedEventArgs("TextBoxValue"));
     }
}

//Declare event for informing changes on bound properties, make sure the form implements INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;

也就是说,代码直接使用属性而不是控件,而绑定则负责处理之间的转换。