2014-01-14 52 views
3

我是C#和编程的新手。我能够在控制台中创建所需的程序,但也希望使用Forms来处理一个。尝试从文本框中获取int时遇到问题。尝试从文本框中获取int时出错

在调试我得到错误:

Error 3 'int' does not contain a definition for 'Text' and no extension method 'Text' accepting a first argument of type 'int' could be found (are you missing a using directive or an assembly reference?) D:\Dropbox\Classwork\C_Sharp\InProgress\PaintDeterminator\Paint Determinator Form\Paint Determinator Form\Form1.cs 30 57 Paint Determinator Form

这里是我到目前为止已经编写的代码。

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 LengthtextBox; 
      int WidthtextBox; 
      int HeighttextBox; 
      int paint; 
      int answer; 

       LengthtextBox = int.Parse(LengthtextBox.Text); 
       WidthtextBox = int.Parse(WidthtextBox.Text); 
       HeighttextBox = int.Parse(HeighttextBox.Text); 
       paint = 350; 

       answer = (LengthtextBox * WidthtextBox * HeighttextBox)/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; 
    } 
+1

我强烈建议不要定义具有相同名称的局部变量我们的班级成员。不考虑问题范围,它使代码非常难以理解。 – David

+1

只是一个建议 - 不要将您的内部变量命名为与文本框控件相同,这很混乱。 –

+0

我编辑了你的标题。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 –

回答

7

为什么你的名字你的文本喜欢你的文本框?这是一个很糟糕的做法,并在最底层令人困惑。正如你所看到的,编译器认为你正在使用int变量而不是文本框,并且抱怨int类型没有名为Text的属性。

所以,简单地改变整数的名称点击方法

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

说,我建议使用Int32.TryParse由用户输入的数据转换为有效的整数内。如果您的用户类型的东西,不能转换为整数,而不是TryParse返回false parse方法将抛出一个异常无需昂贵的例外

例如

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

+1

+1问题描述和更好的解决方案 –

+0

Steve,谢谢!仍然羞于15声望,所以我不能赞赏你,但你用一种容易理解的方式解释了它。这是一个在线课程,虽然这本书和在线资料很有帮助,但在遇到问题时很难获得有关问题的推断。 – Zerodown

2

你声明本地范围的变量,将取代你的实际文本框。呦ushould使用有像不同的名字局部变量:

int length = int.Parse(LengthtextBox.Text); 
int width = int.Parse(WidthtextBox.Text);; 
int height = int.Parse(HeighttextBox.Text);; 
1

在你situatuation,最好重新命名整型,但你ablealso在simmilar情况下使用这个

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

我想如果你是新在编程中也很好地了解这一点,而不是仅仅在不理解的情况下重命名变量。

1

button1_Click()方法来删除这些定义,你使用相同的名字,因为这方法里面的类变量:

int LengthtextBox; 
int WidthtextBox; 
int HeighttextBox; 

的变化而变化的变量的名称:

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; 
2

我更新了你的代码,你使用与您的实际文本框名称相同的变量...这不是一个好主意:

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; 
     } 
+3

你的新变量名称是有误导性的。我会直观地期望像'textBoxLength'和'textBoxWidth'这样的东西来描述'TextBox'的尺寸。 – David

+0

因为你是对的,所以加价。我用新的名字更新了代码...... :) – Faraday

+0

作为任何类型编程的noob,谢谢。出于某种原因,我认为实体必须与文本框的名称相同。 – Zerodown

相关问题