通过使用combobox进行选择,我在将文本框中的输入数据转换为原始数据类型方面遇到了一些困难。下面是我的代码,代码中没有错误,但我在文本框中输入的数据保持不变。请帮助我以正确的方式做到这一点。 谢谢。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
comboBox1.Items.Add("Int");
comboBox1.Items.Add("Double");
comboBox1.Items.Add("Decimal");
comboBox1.Items.Add("Float");
comboBox1.Items.Add("String");
comboBox1.Items.Add("Long");
this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.ComboBox1_SelectedIndexChanged);
}
private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
calculate(((ComboBox)sender).SelectedItem.ToString());
}
private void calculate (string sign)
{
switch (sign)
{
case "Int":
System.Convert.ToInt32(textBox1);
int.Parse(textBox1.Text);
break;
case "Double":
System.Convert.ToDouble(textBox1.Text);
double.Parse(textBox1.Text);
break;
case "Decimal":
System.Convert.ToDecimal(textBox1.Text);
decimal.Parse(textBox1.Text);
break;
case "Float":
System.Convert.ToSingle(textBox1.Text);
Single.Parse(textBox1.Text);
break;
case "String":
System.Convert.ToString(textBox1.Text);
break;
case "Long":
System.Convert.ToInt64(textBox1.Text);
long.Parse(textBox1.Text);
break;
}
}
private void button1_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
}
}
答案 0 :(得分:0)
首先,您尝试将文本框本身解析为这些类型,而不是文本框中的值。您应该使用文本框中的Text
属性来获取值:
int.Parse(textBox1.Text); //Note the .Text
其次,您没有将操作结果分配给文本框。要为文本框指定值,请再次使用Text
属性:
textBox1.Text = int.Parse(textBox1.Text).ToString();
第三,如果文本框内的内容对您选择的类型无效,则会失败。例如,如果在文本框中输入“hello”并选择int
,则代码将崩溃,因为您无法将“hello”解析为int
。你可以通过追踪FormatException
来解决这个问题。
try
{
int.Parse(textBox1.Text);
}
catch (FormatException fe)
{
//Display an error
}
或者,您可以对每种类型(TryParse
)
int.TryParse
方法
第四,在某些情况下,你不会注意到任何改变。如果您在文本框中输入123
并将其解析为int
并替换文本框值,则仍会显示123
,因为这是int
值的字符串表示形式123
是。
第五,你想在这里完成什么?这段代码基本上什么都不做
答案 1 :(得分:0)
这些是您正在使用的一些方法:
http://msdn.microsoft.com/en-us/library/sf1aw27b.aspx
http://msdn.microsoft.com/en-us/library/b3h1hf19.aspx
请注意文档中提到了返回值。
这些功能不会影响应用程序中的任何内容。他们只是回复你的操作结果。你应该对结果做些什么。
如果您想使用转换操作的结果更新TextBox,那么您需要像这样分配它:
textBox1.Text = Int32.Parse(textBox1.Text);
那说:
1)切勿使用textBox1
等对象名称。
2)你不需要同时调用Convert.ToXXX()和XXX.Parse(),你想要做一个或另一个。
3)考虑使用TryParse方法而不是Parse方法,或者添加一些异常处理。现在,如果用户在TextBox中输入了无法转换为该类型的内容,则会抛出未处理的异常。
答案 2 :(得分:0)
int.Parse(textbox.Text)
,double.Parse(textbox.Text)
等不会更改textbox.Text
中的值。
这些方法将返回数值类型的值。如果要将值重新分配给textbox.Text,则必须执行
textbox.Text = int.Parse(textbox.Text).toString();
但是,这段代码没有任何用处。
更好地使用Parse方法将是这样的:
int a = int.Parse(textbox1.Text);
int b = int.Parse(textbox2.Text);
textbox3.Text = (a+b).toString();