Error when trying to get an int from textbox

前端 未结 5 1067
时光取名叫无心
时光取名叫无心 2021-01-20 04:37

I am new to C# and programming in general. I was able to create the required program in Console but want to get one working with Forms as well. I am running into an issue wh

相关标签:
5条回答
  • 2021-01-20 04:53

    Why do you name your ints like your textboxes? It is really a bad practice and confusing at the uttermost level. As you can see, the compiler thinks that you are using the int variables instead of the textboxes and complains that an int type have no property called Text.

    So simply change the name of the ints inside the click method

       private void button1_Click(object sender, EventArgs e)
       {
            int l;
            int w;
            int h;
            int paint;
            int answer;
    
            l = int.Parse(LengthtextBox.Text);
            w = int.Parse(WidthtextBox.Text);
            h = int.Parse(HeighttextBox.Text);
            paint = 350;
    
            answer = (l * w * h) / paint;
    
             MessageBox.Show( answer.ToString() );
        }
    

    Said that, I suggest to use Int32.TryParse to convert the data typed by your user in a valid integer. The Parse method will throw an exception if your user types something that cannot be translated to an integer, instead TryParse returns false without a costly exception

    For example

      int l;
      if(!Int32.TryParse(LengthtextBox.Text, out l))
      {
           MessageBox.Show("Please type a valid number for Length");
           return;
      }
    

    When the Int32.TryParse returns, the out parameter (l) contains the 32-bit signed integer value equivalent of the number contained in your textbox, if the conversion succeeds, or zero if the conversion fails

    0 讨论(0)
  • 2021-01-20 05:04

    I updated your code, you were using variables with the same names as your actual text boxes... That's not a good idea:

    using System;
        using System.Collections.Generic;
        using System.ComponentModel;
        using System.Data;
        using System.Drawing;
        using System.Linq;
        using System.Text;
        using System.Threading.Tasks;
        using System.Windows.Forms;
    
        namespace Paint_Determinator_Form
        {
            public partial class Form1 : Form
            {
                public Form1()
                {
                    InitializeComponent();
                }
    
                private void button1_Click(object sender, EventArgs e)
                {
                    int length;
                    int width;
                    int height;
                    int paint;
                    int answer;
    
                        length = int.Parse(LengthtextBox.Text);
                        width = int.Parse(WidthtextBox.Text);
                        height = int.Parse(HeighttextBox.Text);
                        paint = 350;
    
                        answer = (length* width* height) / paint;
    
                        MessageBox.Show( answer.ToString() );
    
                }
    
            }
        }
    
        namespace Paint_Determinator_Form
        {
            partial class Form1
            {
                /// <summary>
                /// Required designer variable.
                /// </summary>
                private System.ComponentModel.IContainer components = null;
    
                /// <summary>
                /// Clean up any resources being used.
                /// </summary>
                /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
                protected override void Dispose(bool disposing)
                {
                    if (disposing && (components != null))
                    {
                        components.Dispose();
                    }
                    base.Dispose(disposing);
                }
    
                #region Windows Form Designer generated code
    
                /// <summary>
                /// Required method for Designer support - do not modify
                /// the contents of this method with the code editor.
                /// </summary>
                private void InitializeComponent()
                {
                    this.label1 = new System.Windows.Forms.Label();
                    this.label2 = new System.Windows.Forms.Label();
                    this.label3 = new System.Windows.Forms.Label();
                    this.label4 = new System.Windows.Forms.Label();
                    this.WidthtextBox = new System.Windows.Forms.TextBox();
                    this.HeighttextBox = new System.Windows.Forms.TextBox();
                    this.LengthtextBox = new System.Windows.Forms.TextBox();
                    this.button1 = new System.Windows.Forms.Button();
                    this.SuspendLayout();
                    // 
                    // label1
                    // 
                    this.label1.AutoSize = true;
                    this.label1.Location = new System.Drawing.Point(28, 29);
                    this.label1.Name = "label1";
                    this.label1.Size = new System.Drawing.Size(454, 13);
                    this.label1.TabIndex = 0;
                    this.label1.Text = "Welcome to Paint Determinator! Please enter the measurements in the appropriate f" +
            "ields below!";
                    // 
                    // label2
                    // 
                    this.label2.AutoSize = true;
                    this.label2.Location = new System.Drawing.Point(28, 91);
                    this.label2.Name = "label2";
                    this.label2.Size = new System.Drawing.Size(35, 13);
                    this.label2.TabIndex = 1;
                    this.label2.Text = "Width";
                    // 
                    // label3
                    // 
                    this.label3.AutoSize = true;
                    this.label3.Location = new System.Drawing.Point(28, 139);
                    this.label3.Name = "label3";
                    this.label3.Size = new System.Drawing.Size(38, 13);
                    this.label3.TabIndex = 2;
                    this.label3.Text = "Height";
                    // 
                    // label4
                    // 
                    this.label4.AutoSize = true;
                    this.label4.Location = new System.Drawing.Point(28, 183);
                    this.label4.Name = "label4";
                    this.label4.Size = new System.Drawing.Size(40, 13);
                    this.label4.TabIndex = 3;
                    this.label4.Text = "Length";
                    // 
                    // WidthtextBox
                    // 
                    this.WidthtextBox.Location = new System.Drawing.Point(175, 83);
                    this.WidthtextBox.Name = "WidthtextBox";
                    this.WidthtextBox.Size = new System.Drawing.Size(100, 20);
                    this.WidthtextBox.TabIndex = 5;
                    // 
                    // HeighttextBox
                    // 
                    this.HeighttextBox.Location = new System.Drawing.Point(175, 131);
                    this.HeighttextBox.Name = "HeighttextBox";
                    this.HeighttextBox.Size = new System.Drawing.Size(100, 20);
                    this.HeighttextBox.TabIndex = 6;
                    // 
                    // LengthtextBox
                    // 
                    this.LengthtextBox.Location = new System.Drawing.Point(175, 183);
                    this.LengthtextBox.Name = "LengthtextBox";
                    this.LengthtextBox.Size = new System.Drawing.Size(100, 20);
                    this.LengthtextBox.TabIndex = 7;
                    // 
                    // button1
                    // 
                    this.button1.Location = new System.Drawing.Point(349, 402);
                    this.button1.Name = "button1";
                    this.button1.Size = new System.Drawing.Size(75, 23);
                    this.button1.TabIndex = 9;
                    this.button1.Text = "Paint";
                    this.button1.UseVisualStyleBackColor = true;
                    // 
                    // Form1
                    // 
                    this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
                    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                    this.ClientSize = new System.Drawing.Size(511, 447);
                    this.Controls.Add(this.button1);
                    this.Controls.Add(this.LengthtextBox);
                    this.Controls.Add(this.HeighttextBox);
                    this.Controls.Add(this.WidthtextBox);
                    this.Controls.Add(this.label4);
                    this.Controls.Add(this.label3);
                    this.Controls.Add(this.label2);
                    this.Controls.Add(this.label1);
                    this.Name = "Form1";
                    this.Text = "Form1";
                    this.ResumeLayout(false);
                    this.PerformLayout();
    
                }
    
                #endregion
    
                private System.Windows.Forms.Label label1;
                private System.Windows.Forms.Label label2;
                private System.Windows.Forms.Label label3;
                private System.Windows.Forms.Label label4;
                private System.Windows.Forms.TextBox WidthtextBox;
                private System.Windows.Forms.TextBox HeighttextBox;
                private System.Windows.Forms.TextBox LengthtextBox;
                private System.Windows.Forms.Button button1;
            }
    
    0 讨论(0)
  • 2021-01-20 05:05

    In your situatuation it's better to rename ints, but you are ablealso to use this in simmilar situation

    LengthtextBox = int.Parse(this.LengthtextBox.Text);
    WidthtextBox = int.Parse(this.WidthtextBox.Text);
    HeighttextBox = int.Parse(this.HeighttextBox.Text);
    

    I think if you are new in programing it's good to know about this too, instead just renaming variables without understanding.

    0 讨论(0)
  • 2021-01-20 05:12

    You're declaring locally scoped variables that will replace your actual textboxes. Yo ushould use local variables that have different names like:

    int length = int.Parse(LengthtextBox.Text);
    int width = int.Parse(WidthtextBox.Text);;
    int height = int.Parse(HeighttextBox.Text);;
    
    0 讨论(0)
  • 2021-01-20 05:13

    Remove those definitions from button1_Click() method as you use the same names as the class variables inside this method:

    int LengthtextBox;
    int WidthtextBox;
    int HeighttextBox;
    

    And change the name of the variables:

    int length;
    int width;
    int height;
    
    length= int.Parse(LengthtextBox.Text);
    width= int.Parse(WidthtextBox.Text);
    height= int.Parse(HeighttextBox.Text);
    paint = 350;
    
    answer = (length* width* height) / paint;
    
    0 讨论(0)
提交回复
热议问题