2013-09-30 6 views
1

У меня возникли некоторые трудности с преобразованием входных данных в текстовое поле в примитивные типы данных, выбирая с помощью 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(); 

В-третьих, это будет ошибкой, если то, что находится внутри текстового поля не является допустимым для выбранного типа. Например, если вы введете «привет» в текстовое поле и выберете int, код выйдет из строя, потому что вы не сможете разобрать «привет» на int. Вы можете исправить это, поймав FormatException.

try 
{ 
    int.Parse(textBox1.Text); 
} 
catch (FormatException fe) 
{ 
    //Display an error 
} 

В качестве альтернативы вы можете использовать методы TryParse по каждому типу (int.TryParse)

В-четвертых, в некоторых случаях вы не заметили какую-либо вещь изменится в любом случае. Если вы введете 123 в текстовое поле и проанализируете его до int и замените значение текстового поля, оно все равно скажет 123, потому что это то, что представляет собой строковое представление значения int123.

В-пятых, что вы пытаетесь выполнить здесь? Этот код в основном ничего не делает.

+0

я последовал за свои шаги, и это дает ошибку «Не удается неявно преобразовать тип 'int' to 'string' " 5. Мой лектор попросит наш класс сделать это упражнение, я понятия не имею, что она делает. – Roshan

+0

Мне удалось установить ToString. Теперь нет ошибки, но значение i, введенное в текстовое поле, остается неизменным. – Roshan

+0

Я исправил свой пример кода, чтобы добавить 'ToString'. Прочтите мой четвертый пункт: в большинстве случаев вы не увидите разницы. Если вы введете '123' в текстовое поле и выберите' decimal', вы увидите, что результат будет '123.00' или что-то подобное. –

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, который не может быть преобразован в этот тип, вы будете бросать необработанное исключение.

0

int.Parse(textbox.Text), double.Parse(textbox.Text) и т. Д. Не изменяет значения в textbox.Text. Этот метод вернет значение в числовом типе. Если вы хотите передать значение обратно в TextBox.Text, вам придется сделать

textbox.Text = int.Parse(textbox.Text).toString(); 

Но этот код не будет делать ничего полезного.

Лучшее использование метода синтаксического разбора было бы что-то вроде этого:

int a = int.Parse(textbox1.Text); 
int b = int.Parse(textbox2.Text); 
textbox3.Text = (a+b).toString(); 
Смежные вопросы