Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# Windows Forms

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 43, средняя оценка - 4.79
san-trane
5 / 5 / 1
Регистрация: 16.03.2011
Сообщений: 191
#1

Динамическое создание большого числа TextBox - C#

03.03.2012, 11:28. Просмотров 6028. Ответов 31
Метки нет (Все метки)

Всем привет!) Как вывести на форму много текст боксов? то есть, есть два текста бокса в которые вводятся количество строк и столбцов массива, и по кнопке на форму выводится заданное количество текст боксов в виде таблицы. Я так понимаю нужно взять один текст бокс в массив, записать его размер и выводить циклом его на форму по координатам? так ли я думаю?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2012, 11:28
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Динамическое создание большого числа TextBox (C#):

Динамическое создание textBox - C#
здравствуйте, возник следующий вопрос: на форме есть textBox1, куда вводится целое число. далее нам нужно создать такое же количество...

Динамическое создание textbox - C#
Я создал вот так: в зависимости от значения NumericUp создаёт заданное кол-во tb и выводятся на tappage, где я им меняю свойство text на...

Динамическое создание textbox-ов - C#
Данная тема уже была поднята на форуме, но там было создание textbox-ов с заведомо известным количеством. У меня же такой вопрос как...

Динамическое создание textbox на форме - C#
Доброго времени суток. Мне нужна помощь у меня есть вот такая форма как сделать чтоб при нажатии на кнопку у меня создавалась новая форма и...

Динамическое создание заданного количества textbox - C#
Каким образом создавать textboxы, количество которых равно введенному числу в textbox8 Вот примерный код, но он создает только 1 textbox ...

Динамическое создание группы TextBox на форме - C#
Как сделать так, что бы при нажатии на кнопку генерировалось н-количество TextBox?

31
san-trane
5 / 5 / 1
Регистрация: 16.03.2011
Сообщений: 191
04.03.2012, 17:04  [ТС] #16
пишу вот это для другой кнопки, а мне пишет что нет такого элемента, " не существует в текущем контексте"
C#
1
tableLayoutPanel1.Dispose(); //Удалить tableLayoutPanel1
может его как то прописать нужно в другой кнопке?
0
Single Feniks
28 / 28 / 1
Регистрация: 05.01.2011
Сообщений: 63
04.03.2012, 17:20 #17
Можешь попробовать так - this.Controls.Remove(this.Controls["tableLayoutPanel1"]);
1
DimanRu
679 / 672 / 49
Регистрация: 15.06.2011
Сообщений: 1,699
04.03.2012, 17:25 #18
Нужно объявить таблицу глобально, в классе, а в первой кнопке просто создавать.

Или как предложил Single Feniks.

Код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//В классе объявили
TableLayoutPanel tableLayoutPanel1;
 
...
 
private void button1_Click(object sender, EventArgs e) //Нажимаем на 1ую кнопку
{
    tableLayoutPanel1 = new TableLayoutPanel(); //Создали экзепляр
    tableLayoutPanel1.ColumnCount = Convert.ToInt32(textBox1.Text); //В 1ом текстбоксе количество столбцов
    tableLayoutPanel1.Location = new Point(50, 50); //Координаты подгоните куда нужно
    tableLayoutPanel1.RowCount = Convert.ToInt32(textBox2.Text); //Во 2ом текстбоксе количество строк
    tableLayoutPanel1.Size = new Size(500, 500); //Размер незнаю как расчитать, поэтому ставлю стразу большой
    this.Controls.Add(tableLayoutPanel1);
 
    for (int i = tableLayoutPanel1.RowCount * tableLayoutPanel1.ColumnCount; i > 0; i--) //Сколько в таблице ячеек
    {
        tableLayoutPanel1.Controls.Add(new TextBox()); //Столько добавляем новых textBox'ов
    }
}
 
private void button2_Click(object sender, EventArgs e) //Нажимаем на 2ую кнопку
{
    tableLayoutPanel1.Dispose();
}
1
san-trane
5 / 5 / 1
Регистрация: 16.03.2011
Сообщений: 191
04.03.2012, 17:36  [ТС] #19
ошибок нет, но ничего не происходит, вот проект, посмотрите пожалуйста, вообще ничего не понимаю, может быть нужно как то сделать обращение к форме, хотя действия происходят на этой же
0
Вложения
Тип файла: rar Симплекс метод.rar (688.3 Кб, 20 просмотров)
DimanRu
679 / 672 / 49
Регистрация: 15.06.2011
Сообщений: 1,699
04.03.2012, 17:41 #20
У вас кнопка "Изменить" - удаляет таблицу.

Измененный код - main.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data; 
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace Симплекс_метод
{
    public partial class main : Form
    {
        TableLayoutPanel tableLayoutPanel1;
 
        public main()
        {
            InitializeComponent();
        }
        
        private void button1_Click(object sender, EventArgs e) // Задать
        {
            button2.Enabled = true;
            button1.Enabled = false;
            // Задаем количество строк и столбцов
            if (textBox1.Text != "" && textBox2.Text != "")
            {
                tableLayoutPanel1 = new TableLayoutPanel();
                tableLayoutPanel1.ColumnCount = Convert.ToInt32(textBox2.Text); //В 2ом текстбоксе количество столбцов
                tableLayoutPanel1.Location = new Point(12, 133); //Координаты 
                tableLayoutPanel1.RowCount = Convert.ToInt32(textBox1.Text); //Во 1ом текстбоксе количество строк
                tableLayoutPanel1.Size = new Size(500, 500); //Размер незнаю как расчитать, поэтому ставлю сразу большой
                this.Controls.Add(tableLayoutPanel1);
 
                for (int i = tableLayoutPanel1.RowCount * tableLayoutPanel1.ColumnCount; i > 0; i--) //Сколько в таблице ячеек
                {
                    tableLayoutPanel1.Controls.Add(new TextBox()); //Столько добавляем новых textBox'ов
                }
            }
            else
            {
                MessageBox.Show("Заполните пустые поля", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
 
        private void button2_Click(object sender, EventArgs e) // Изменить
        {
            button1.Enabled = true;
            button2.Enabled = false;
            tableLayoutPanel1.Dispose(); //Удаляем таблицу
 
            //Что бы нопка изменяла изменяла можно добавить эмулирование клика кнопки1
            //button1.PerformClick();
        }
 
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
 
        }
 
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if ((e.KeyChar <= 48 || e.KeyChar >= 59) && e.KeyChar != 8) // Ввод в textBox только чисел
                e.Handled = true;
        }
 
        private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
        {
            if ((e.KeyChar <= 48 || e.KeyChar >= 59) && e.KeyChar != 8) // Аналогично
                e.Handled = true;
        }
    }
}
1
san-trane
5 / 5 / 1
Регистрация: 16.03.2011
Сообщений: 191
04.03.2012, 17:57  [ТС] #21
теперь работает) спасибо большое за помощь) первый раз сталкиваюсь с "tableLayoutPanel". вот еще размер textBox в ней как изменяется?
C#
1
tableLayoutPanel1.Size = new Size(500, 500); //Размер
я так понял что это размер самой панели и textBox`ы растягиваются вместе с ней. пробовал задать их размер через Control, но не понял как обратиться к textBox которые создаются динамически
0
DimanRu
679 / 672 / 49
Регистрация: 15.06.2011
Сообщений: 1,699
04.03.2012, 18:04 #22
Цитата Сообщение от san-trane Посмотреть сообщение
tableLayoutPanel1.Size = new Size(500, 500); //Размер всей панели
TextBox'ы имеют свой размер, они могут быть растынуты на всю ячейку таким образом:
C#
1
2
textBox1.Dock = DockStyle.Fill;
textBox1.AutoSize = false;
я непомню как просчитать размеры таблицы правильно, но изменить размеры всех textBox'ов можно так:
C#
1
2
3
4
foreach(TextBox textbox in tableLayoutPanel1)
{
    textBox.Size = new Size(/*Размер*/);
}
1
san-trane
5 / 5 / 1
Регистрация: 16.03.2011
Сообщений: 191
04.03.2012, 18:19  [ТС] #23
foreach не хочет принимать
0
DimanRu
679 / 672 / 49
Регистрация: 15.06.2011
Сообщений: 1,699
04.03.2012, 20:39 #24
Попробуй так:
C#
1
2
3
4
5
            
foreach (Control textbox in tableLayoutPanel1.Controls)
{
    textbox.Size = new Size(/*Размер*/);
}
0
san-trane
5 / 5 / 1
Регистрация: 16.03.2011
Сообщений: 191
04.03.2012, 20:55  [ТС] #25
ошибка пропала, а размер текст боксов так и не меняет
0
DimanRu
679 / 672 / 49
Регистрация: 15.06.2011
Сообщений: 1,699
04.03.2012, 21:02 #26
Цитата Сообщение от san-trane Посмотреть сообщение
ошибка пропала, а размер текст боксов так и не меняет
Что нибудь пишет, или просто не меняет? Какой размер вы пишите?

Ах, блин)) Я забыл, у TextBox'ов же авторазмер стоит, нужно менять длинну!
C#
1
2
3
4
foreach (Control textbox in tableLayoutPanel1.Controls)
{
    textbox.Width = 150;//указывайте нужную длинну
}
1
san-trane
5 / 5 / 1
Регистрация: 16.03.2011
Сообщений: 191
04.03.2012, 21:19  [ТС] #27
я вот так писал
C#
1
textBox.Size = new Size(45, 20);
взгляните сами
0
Вложения
Тип файла: rar Симплекс метод.rar (688.7 Кб, 16 просмотров)
DimanRu
679 / 672 / 49
Регистрация: 15.06.2011
Сообщений: 1,699
04.03.2012, 21:26 #28
Пишите:
C#
1
2
3
4
foreach (Control textbox in tableLayoutPanel1.Controls)
{
    textbox.Width = 45;//указывайте нужную длинну
}
0
san-trane
5 / 5 / 1
Регистрация: 16.03.2011
Сообщений: 191
04.03.2012, 23:59  [ТС] #29
вообще беда( я уже и так и сяк(
C#
1
2
3
textBox.Width = 150;
textBox.Size = new Size(45, 20);
textBox.Size = new System.Drawing.Size(45, 20);
все равно не меняет размер(
0
DimanRu
679 / 672 / 49
Регистрация: 15.06.2011
Сообщений: 1,699
05.03.2012, 10:08 #30
Ну конечно! У вас изменение размера происходит ДО создания самих TextBox'ов, даже до добавления таблицы на форму!
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if (textBox1.Text != "" && textBox2.Text != "")
            {
                tableLayoutPanel1 = new TableLayoutPanel();
                tableLayoutPanel1.ColumnCount = Convert.ToInt32(textBox2.Text); //В 2ом текстбоксе количество столбцов
                tableLayoutPanel1.Location = new Point(12, 133); //Координаты 
                tableLayoutPanel1.RowCount = Convert.ToInt32(textBox1.Text); //Во 1ом текстбоксе количество строк
                tableLayoutPanel1.Size = new Size(500, 500); //Размер незнаю как расчитать, поэтому ставлю сразу большой
                foreach (Control textBox in tableLayoutPanel1.Controls) //Текстбоксы создаются ниже!!!
                {
                    textBox.Width = 150;
                }
                this.Controls.Add(tableLayoutPanel1);
 
                for (int i = tableLayoutPanel1.RowCount * tableLayoutPanel1.ColumnCount; i > 0; i--) //Сколько в таблице ячеек
                {
                    tableLayoutPanel1.Controls.Add(new TextBox()); //Столько добавляем новых textBox'ов
                }
            }
Вот будет правильный
код

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
private void button1_Click(object sender, EventArgs e) // Задать
{
    button2.Enabled = true;
    button1.Enabled = false;
 
    // Задаем количество строк и столбцов
    if (textBox1.Text != "" && textBox2.Text != "")
    {
        tableLayoutPanel1 = new TableLayoutPanel();
        tableLayoutPanel1.ColumnCount = Convert.ToInt32(textBox2.Text); //В 2ом текстбоксе количество столбцов
        tableLayoutPanel1.Location = new Point(12, 133); //Координаты 
        tableLayoutPanel1.RowCount = Convert.ToInt32(textBox1.Text); //Во 1ом текстбоксе количество строк
        tableLayoutPanel1.Size = new Size(500, 500); //Размер незнаю как расчитать, поэтому ставлю сразу большой
        this.Controls.Add(tableLayoutPanel1);
 
        for (int i = tableLayoutPanel1.RowCount * tableLayoutPanel1.ColumnCount; i > 0; i--) //Сколько в таблице ячеек
        {
            tableLayoutPanel1.Controls.Add(new TextBox()); //Столько добавляем новых textBox'ов
        }
 
        foreach (Control textBox in tableLayoutPanel1.Controls) //И только тут меняем их размер!
        {
            textBox.Width = 150;
        }
    }
    else
    {
        MessageBox.Show("Заполните пустые поля", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}
.
0
05.03.2012, 10:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2012, 10:08
Привет! Вот еще темы с ответами:

Динамическое создание TextBox с заданными свойствами - C#
Как можно создать матрицу из TextBox? И нужны скроллы справа и снизу, если TextBox не поместятся на форме.

Динамическое создание Label в количестве, указанном в TextBox - C#
Есть форма на которой находится TextBox, Button и groupBox. Пользователь водит в TextBox некое целое число ( от 0 до 100). Надо чтобы при...

Динамическое создание TextBox в цикле с использованием индексов - C#
Нужно создать N-ое количество textBox'ов в духе: this.Controls as TextBox Можно как-нибудь объявить к примеру 10 элементов в цикле? ...

Обработчик событий в коде: динамическое создание TextBox с присоединением обработчика - C#
String Tickets; //Global //обработчик после завершения работы dispatcher private void worker_RunWorkerCompleted(object sender,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru