String t = textBox1.Text;
int a = int.Parse(t);
if( a < 24)
{
MessageBox.Show("24 over.");
textBox1.Clear();
}
未处理的类型&#39; System.FormatException&#39;发生在 mscorlib.dll其他信息:输入字符串不正确 格式
如何将字符串类型值更改为整数类型值?
答案 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;
也就是说,代码直接使用属性而不是控件,而绑定则负责处理之间的转换。