如何从运行时创建的Textbox中获取Text

时间:2014-01-06 16:36:04

标签: c# winforms

我创建了WinForm应用程序,用户可以在其中设置他想要的文本框数量(范围1-99) 我正在使用此代码在运行时

创建文本框
  for (int i = 0; i < Calculation.Num; i++)
   {
       TextBox txtRun = new TextBox();
       txtRun.Name = "txtBox" + i;
       txtRun.Location = new System.Drawing.Point(35, 50 + (20 * i) * 2);
       txtRun.Size = new System.Drawing.Size(75, 25);
       this.Controls.Add(txtRun);                
   }

假设用户创建2个文本框,然后在每个文本框中输入数据,然后单击“计算”按钮 现在我想获取文本框数据并将其除以100

请参阅我想要的图片txtbox1和txtbox2数据

enter image description here

编辑3:

这是整个代码

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 GPA_Calculatior__New_
{
    public partial class Form1 : Form
    {

        int j = 0;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //Label + Marks Obtained Textbox
            for (int i = 0; i < Calculation.Num; i++)
            {
                Label lblCount = new Label();
                lblCount.Name = "lblCount" + i;
                lblCount.Location = new System.Drawing.Point(5, 55 + (20 * i) * 2);
                lblCount.Size = new System.Drawing.Size(20, 30);
                lblCount.Text = (i + 1).ToString();
                this.Controls.Add(lblCount);

                TextBox txtRun = new TextBox();
                txtRun.Name = "txtBox" + i;
                txtRun.Location = new System.Drawing.Point(35, 50 + (20 * i) * 2);
                txtRun.Size = new System.Drawing.Size(75, 25);
                this.Controls.Add(txtRun);   

            }

            //Creating Textbox which is for total marks
            for (j = 0; j < Calculation.Num; j++)
            {
                TextBox txtRun = new TextBox();
                txtRun.Name = "TotaltxtBox" + j;
                txtRun.Location = new System.Drawing.Point(160, 50 + (20 * j) * 2);
                txtRun.Size = new System.Drawing.Size(50, 25);
                txtRun.Text = "100";
                txtRun.Enabled = false;
                this.Controls.Add(txtRun);
            }
            // Creating 2 Buttons (Calculate and Back)
            for (int k = 0; k < 2; k++)
            {
                Button Btn = new Button();
                Btn.Name = "btn" + k;
                Btn.Location = new System.Drawing.Point(20 + (k *110), 60 + (20 * j) * 2);
                Btn.Size = new System.Drawing.Size(90, 30);

                if (k == 0)               
                    Btn.Text = "Back";

                else
                    Btn.Text = "Calculate";

                Btn.Click += button_Click;

                this.Controls.Add(Btn);
            }

            //Just for Giving free space in last

            Label lbl = new Label();
            lbl.Name = "lbl" + j;
            lbl.Location = new System.Drawing.Point(30, 90 + (20 * j) * 2);
            lbl.Size = new System.Drawing.Size(90, 30);
            lbl.Text = "";

            this.Controls.Add(lbl);
            //**********************************************
        }

        //Caculate and back button function
        private void button_Click(object sender, EventArgs e)
        {
            Button btn = sender as Button;
            if (btn.Name.Equals("btn1"))
            {
                for (int i = 0; i < Calculation.Num; i++)
                {

                }
            }
            else
            {
                GPA_Calculator mainForm = new GPA_Calculator();
                mainForm.Show();
                this.Hide();
            } 
        }




        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            for (j = 0; j < 10; j++)
            {

            }
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            Application.Exit();
        }

    }
}

2 个答案:

答案 0 :(得分:5)

var sum = this.Controls.OfType<TextBox>()
    .Where(t => char.IsDigit(t.Name.Reverse().Take(1).FirstOrDefault())
        && t.Enabled)
    .Select(t =>
    {
        double i;
        if (!double.TryParse(t.Text, out i)) { return 0d; }
        return i / 100d;
    })
    .Sum();

答案 1 :(得分:0)

这可能有效,我构建了一个单独的类来存储控件及其值,然后您可以独立于表单的其余部分计算出值。您需要触发计算:

    private List<InfoTextBox> activeTextBoxes = new List<InfoTextBox>();
    public Form1()
    {         
        for (int i = 0; i < Calculation.Num; i++)
        {
            TextBox txtRun = new TextBox();
            txtRun.Name = "txtBox" + i;
            txtRun.Location = new System.Drawing.Point(35, 50 + (20 * i) * 2);
            txtRun.Size = new System.Drawing.Size(75, 25);
            this.Controls.Add(txtRun);
            InfoTextBox iBox = new InfoTextBox();
            iBox.textbox = txtRun;
            activeTextBoxes.Add(iBox);
        }
    }

    public class InfoTextBox
{
    private double _textboxValue;
    public TextBox textbox { get; set; }
    public double TextBoxValue { get { return _textboxValue; } set { _textboxValue = setValue(value); } }

    private double setValue(double invalue)
    {
        return invalue / 100;
    }
}