2017-09-26 30 views
-1

ここにこのコードがありますが、同じエラーが発生します。誰かが私が間違ったことを教えてもらえますか?タイプ 'system.windows.forms.textbox'のオブジェクトをキャストして、 'System.IConvertible'エラーをC#フォームに入力できません。

private void button1_Click(object sender, EventArgs e) 
{ 
    double gallonsToBuy;//for equation 
    double WALL_LENGTH; //holds wall length 
    double WALL_HEIGHT; //holds wall height 
    int NUM_DOORS; //holds number of doors 
    int NUM_WINDOWS; //holds number of windows 
    int NUM_COATS; //holds number of coats of paint 
    const double GALLON_SF = 350; //one gallon covers 350 square feet 

    //allows user to input their numbers 
    WALL_LENGTH = Convert.ToDouble(textBox1); 
    WALL_HEIGHT = Convert.ToDouble(textBox2); 
    NUM_DOORS = Convert.ToInt32(textBox3); 
    NUM_WINDOWS = Convert.ToInt32(textBox4); 
    NUM_COATS = Convert.ToInt32(textBox5); 

    //Equation 
    gallonsToBuy = ((((WALL_LENGTH * WALL_HEIGHT) - (20 * NUM_DOORS) - (15 * NUM_WINDOWS)) * NUM_COATS) /350); 

    label7.Text = "Gallons to buy =" +gallonsToBuy; 
} 
+0

エラーメッセージの言い換えをしないでください。デバッガからメッセージをコピーし、[編集](https://stackoverflow.com/posts/46437200/edit)あなたの質問を貼り付けてください。 –

+0

'textBox1.Text' !!!!! 'textBox1'ではなく – Transcendent

答えて

1

あなたのコードを見る私はtextBox1、textBox1などがTextBoxコントロールであると信じています。コントロールタイプをデータタイプに変換することはできません。プロパティ内で.textプロパティを使用してコントロール内の値にアクセスする必要があります。

WALL_LENGTH = Convert.ToDouble(textBox1.Text); 
    WALL_HEIGHT = Convert.ToDouble(textBox2.Text); 
    NUM_DOORS = Convert.ToInt32(textBox3.Text); 
    NUM_WINDOWS = Convert.ToInt32(textBox4.Text); 
    NUM_COATS = Convert.ToInt32(textBox5.Text); 

入力フィールドに値があることを確認します。それ以外の場合は、string.emptyから変換しようとするとキャストエラーが発生します。

2

TextBoxdoubleに変換しようとしたときにエラーが発生しました。

WALL_LENGTH = Convert.ToDouble(textBox1); 

TextBox .NETオブジェクト型であり、あなたは、二重の意味の変換を行うことはできません。あなたがしなければならないのはTextBox.Textの値をdoubleに変換することです。ユーザーがdoubleに変換できない文字を入力した場合

WALL_LENGTH = Convert.ToDouble(textBox1.Text); 

しかし、これだけではまだ、発生しやすい問題とエラーになります。

さらに、int.TryParse()double.TryParse()などの変換に適切な方法を使用する必要があります。すべてのそのような変換が成功した場合例えば

double WALL_LENGTH; 
double.TryParse(textBox1.Text, out WALL_LENGTH); 

は、その後、計算を進めます。

関連する問題