1

コンボボックスで選択して、テキストボックスの入力データをプリミティブデータ型に変換する際に、いくつかの問題に直面しました。以下は私のコードです。コードにエラーはありませんが、テキストボックスに入力したデータは同じままです。正しい方法でそれを行うのを手伝ってください。ありがとうございました。

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

3 に答える 3

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) Parse メソッドの代わりに TryParse メソッドの使用を検討するか、何らかの例外処理を追加します。現時点では、ユーザーがその型に変換できない何かを TextBox に入力すると、未処理の例外がスローされます。

于 2013-09-30T20:51:38.293 に答える
0

まず、テキスト ボックス内の値ではなく、テキスト ボックス自体をこれらの型に解析しようとしています。Text値を取得するには、テキスト ボックスのプロパティを使用する必要があります。

int.Parse(textBox1.Text); //Note the .Text

次に、操作の結果をテキストボックスに割り当てていません。テキストボックスに値を割り当てるには、再度Textプロパティを使用します:

textBox1.Text = int.Parse(textBox1.Text).ToString();

第 3 に、テキスト ボックスの内容が選択したタイプに対して有効でない場合、これは失敗します。たとえば、テキスト ボックスに「hello」と入力して選択intすると、「hello」を .xml に解析できないため、コードがクラッシュしますint。をキャッチすることでこれを修正できますFormatException

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

TryParseまたは、各タイプのメソッドを使用することもできます( int.TryParse)

第 4 に、何らかの変化に気付かない場合もあります。テキストボックスに入力123して解析しint、テキストボックスの値を置き換えても、それは値の文字列表現であるため、引き続き表示123されます。int123

第5に、ここで何を達成しようとしていますか? このコードは基本的に何もしません。

于 2013-09-30T20:49:30.400 に答える