С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.82/34: Рейтинг темы: голосов - 34, средняя оценка - 4.82
san-trane
5 / 5 / 1
Регистрация: 16.03.2011
Сообщений: 191
1

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

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

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

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

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

Динамическое создание textbox
Я создал вот так: в зависимости от значения NumericUp создаёт заданное кол-во...

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

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

31
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
684 / 677 / 167
Регистрация: 15.06.2011
Сообщений: 1,701
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
684 / 677 / 167
Регистрация: 15.06.2011
Сообщений: 1,701
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
684 / 677 / 167
Регистрация: 15.06.2011
Сообщений: 1,701
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
684 / 677 / 167
Регистрация: 15.06.2011
Сообщений: 1,701
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
684 / 677 / 167
Регистрация: 15.06.2011
Сообщений: 1,701
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
san-trane
5 / 5 / 1
Регистрация: 16.03.2011
Сообщений: 191
05.03.2012, 13:01  [ТС] 31
аа, все, просто я неправильно понял. я думал, что если текстбоксы создаются в самой таблице, значит нет разницы где прописывать их размер. значит сначала нужно их создать а потом прописать из размер))
0
DimanRu
684 / 677 / 167
Регистрация: 15.06.2011
Сообщений: 1,701
05.03.2012, 13:06 32
Цитата Сообщение от san-trane Посмотреть сообщение
значит сначала нужно их создать а потом прописать из размер))
Так точно!
0
05.03.2012, 13:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2012, 13:06

Динамическое создание заданного количества textbox
Каким образом создавать textboxы, количество которых равно введенному числу в...

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

Динамическое создание TextBox в цикле с использованием индексов
Нужно создать N-ое количество textBox'ов в духе: this.Controls as TextBox...


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

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

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