【问题标题】:Convert input data to primitive data type将输入数据转换为原始数据类型
【发布时间】:2013-09-30 20:43:57
【问题描述】:

通过使用组合框进行选择,我在将文本框中的输入数据转换为原始数据类型时遇到了一些困难。下面是我的代码,代码中没有错误,但我在文本框中输入的数据保持不变。请帮助我以正确的方式进行操作。 谢谢。

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

【问题讨论】:

  • 您没有将解析和转换的结果分配给任何东西

标签: c# combobox int switch-statement typeconverter


【解决方案1】:

首先,您尝试将文本框本身解析为这些类型,而不是文本框内的值。您应该使用文本框上的 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,因为这就是int123 的字符串表示形式。

第五,你想在这里完成什么?这段代码基本上什么都不做。

【讨论】:

  • 我按照您的步骤操作,但出现错误“无法将类型 'int' 隐式转换为 'string'” 5. 我的讲师要求我们班做这个练习,我不知道她在做什么.
  • 我设法把 ToString。现在没有错误,但我在文本框中输入的值保持不变。
  • 我修复了我的代码示例以添加ToString。阅读我的第四点:大多数情况下你不会看到差异。如果您在文本框中输入123 并选择decimal,您应该会看到输出为123.00 或类似的内容。
【解决方案2】:

这些是您正在使用的一些方法:

http://msdn.microsoft.com/en-us/library/sf1aw27b.aspx

http://msdn.microsoft.com/en-us/library/b3h1hf19.aspx

注意文档中提到了一个返回值。

这些函数不会影响您的应用程序中的任何内容。他们只是将操作的结果返回给您。由你决定对结果做些什么。

如果你想用转换操作的结果更新你的文本框,那么你需要像这样分配它:

textBox1.Text = Int32.Parse(textBox1.Text);

也就是说:

1) 切勿使用 textBox1 这样的对象名称。

2) 您不需要同时调用 Convert.ToXXX() 和 XXX.Parse(),您可以选择其中的一个。

3) 考虑使用 TryParse 方法而不是 Parse 方法,或者添加一些异常处理。就像现在一样,如果用户在 TextBox 中输入了无法转换为该类型的内容,您将抛出未处理的异常。

【讨论】:

    【解决方案3】:

    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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-26
      相关资源
      最近更新 更多