Вызвать объект после создания действием в C# Winform - PullRequest
0 голосов
/ 01 февраля 2020

У меня есть действие для моей кнопки в c# Winform следующим образом:

 private void btnAction_Click(object sender, EventArgs e)
        {
            TextBox tbxdg = new TextBox();
            tbxdg.Name = "tbx_DG" + cx.ToString();
            tbxdg.Location = new Point(508, 12 + (40 * cx));
            tbxdg.Size = new Size(200, 24);
            tbxdg.Font = new Font("Tahoma", 10);
            panel2.Controls.Add(tbxdg);

            cx++;
        }

Теперь я хочу получить текст из текстового поля, которое я создал, нажав мою кнопку. Я попытался вызвать текстовое поле по имени, которое я дал ему в действии нажатия кнопки, но оно не работает.

Ответы [ 3 ]

0 голосов
/ 01 февраля 2020
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private int cx = 0;
        private void button1_Click(object sender, EventArgs e)
        {
                TextBox tbxdg = new TextBox();
                tbxdg.Name = "tbx_DG" + cx.ToString();
                tbxdg.Location = new Point(0, 0 + (40 * cx));
                tbxdg.Size = new Size(200, 24);
                tbxdg.Font = new Font("Tahoma", 10);
                panel1.Controls.Add(tbxdg);

                cx++;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            label1.Text = string.Empty;
            foreach (TextBox tb in panel1.Controls)
            {
                label1.Text += $"{tb.Name} - {tb.Text}\n";
            }
        }
    }

Демо

0 голосов
/ 01 февраля 2020

Вместо поиска по имени элемента управления на панели, другой подход заключается в добавлении всех динамических c текстовых полей в глобальные List<TextBox> Пожалуйста, прочитайте комментарии внутри примера:

private int cx;
private List<TextBox> DynamicTextBoxesList = new List<TextBox>();

private void btnAction_Click(object sender, EventArgs e)
{
    TextBox tbxdg = new TextBox();
    tbxdg.Name = "tbx_DG" + cx.ToString();
    tbxdg.Location = new Point(508, 12 + (40 * cx));
    tbxdg.Size = new Size(200, 24);
    tbxdg.Font = new Font("Tahoma", 10);
    panel2.Controls.Add(tbxdg);
    // add to list
    DynamicTextBoxesList.Add(tbxdg);
    cx++;
}

// button event for example how to use DynamicTextBoxesList
private void btnExampleFoaccesingTextBoxes_Click(object sender, EventArgs e)
{
    if (DynamicTextBoxesList.Count > 0)
    {
        foreach (TextBox t in DynamicTextBoxesList)
        {
            MessageBox.Show(t.Text);
        }

        // or you can find by name for example you need cx=1:
        var txtbox = DynamicTextBoxesList.Where(x => x.Name == "tbx_DG1").FirstOrDefault();
        if (txtbox != null)
        {
            MessageBox.Show(txtbox.Text);
        }
    }
}
0 голосов
/ 01 февраля 2020

вы можете попробовать это:

var textBoxText = panel2.Controls.Find("name of textbox", false).First().Text;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...