Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание объектов с введенной переменной 
V
    Опции темы
kozhura
Дата 1.2.2010, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 14.3.2009

Репутация: нет
Всего: нет



Ребят, первые шаги делаю в программировании на формах, пока не привычно, вообщем у меня вопрос такой немного ламерский возможно, постараюсь объяснить понятно.
Суть проблеммы такова: у меня есть объект TextBox, в который можно записать только числа, которые затем конвертируются в int из string, и идея моя следующая: чтобы после ввода, допустим цифры 3, автоматически создавалось несколько textbox объектов по введенному числу, как это сделать?
Нужный фрагмент моего кода:
Код

 private void textBox1_TextChanged(object sender, EventArgs e)
        {
            if (textBox1.Text != null)
            {
                int numpupils = Convert.ToInt32(textBox1.Text);
                

            }
        }


Это сообщение отредактировал(а) kozhura - 1.2.2010, 22:50
PM MAIL   Вверх
Ceiceron
Дата 1.2.2010, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 2.8.2007
Где: Дубна

Репутация: нет
Всего: нет



Код

            if(!String.IsNullOrEmpty(textBox1.Text)) //ну получаемую строку лучше проверять так
            {
                int count_boxes=0;
                if(int.TryParse(textBox1.Text,out count_boxes)) //парсить число лучше так, не будет неожидвннх ошибок конвертации
                {
                    // я взял панель, для размещения новых элементов, как там вам надо это уж самостоятельно разбирайте
                    panel1.Controls.Clear(); // очищаем панель от контролов, т.к. она нам нужна не загромажденной
                    for(int i=0;i<count_boxes;i++) //цикл, где создаем тестовые поля
                    {
                        TextBox text = new TextBox(); //собственно создание, далее идут настройки
                        text.Show(); //показываем текстовое поле (на всякий случай)
                        text.Width = panel1.Width;
                        text.Dock = DockStyle.Bottom; 
                        panel1.Controls.Add(text); //добавляем на панель
                    }
                }
            }

далее если нужно привязать обработчик к текстовым полям, то welcome to MSDN.
PM MAIL   Вверх
kozhura
Дата 7.2.2010, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 14.3.2009

Репутация: нет
Всего: нет



Ceiceron, 
Большое спасибо, +1, но вопрос за вопросом опять-таки, вообщем для обработки текстовых полей сделал так, но в конец запутался:
Код

                       TextBox text = new TextBox();
                        text.Show(); 
                        text.Width = panel1.Width;
                        text.Dock = DockStyle.Bottom;
                        text.AcceptsTab = true;
                        panel1.Controls.Add(text); 
                        panel1.Update();
                        List<TextBox> mytextboxs = new List<TextBox>();
                        string[] result = new string[mytextboxs.Count()];
                        int increment = 0;
                        foreach (TextBox textbox in mytextboxs)
                        {
                            result[increment] = textbox.Text;
                            increment++;
                            
                        }
                        List<string> mystring = new List<string>();
                        foreach (Control mycontrol in panel1.Controls)//<- Что тут нужно выбрать?
                        {
                            if (mycontrol == TextBox) //<- А что сравнивать здесь?
                            {
                                mystring.Add(mycontrol.Text);
                            }
                        }

PM MAIL   Вверх
Ceiceron
Дата 7.2.2010, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 2.8.2007
Где: Дубна

Репутация: нет
Всего: нет



kozhura, о! таким макаром ни чего не получиться ;)
Что бы получить значение из TextBoxа, созданного на форме динамически, нужно оперировать либо его именем, либо прицепить к нему соответствующий обработчик. Если я правильно понял, то вы хотите после создания контролов на каком-то этапе получать с них введенные данные, то мой код можно модифицировать следующим образом:
Код

//где-то в рамках класса формы или какого-либо другого
List<TextBox> tesxtboxes=new List<TextBox>(); //будем помнить созданные объекты

//..................

 if(!String.IsNullOrEmpty(textBox1.Text)) //ну получаемую строку лучше проверять так
            {
                int count_boxes=0;
                if(int.TryParse(textBox1.Text,out count_boxes)) //парсить число лучше так, не будет неожидвннх ошибок конвертации
                {
                    // я взял панель, для размещения новых элементов, как там вам надо это уж самостоятельно разбирайте
                    panel1.Controls.Clear(); // очищаем панель от контролов, т.к. она нам нужна не загромажденной

                    for(int i=0;i<count_boxes;i++) //цикл, где создаем тестовые поля
                    {
                        TextBox text = new TextBox(); //собственно создание, далее идут настройки
                        text.Show(); //показываем текстовое поле (на всякий случай)
                        text.Width = panel1.Width;
                        text.Dock = DockStyle.Bottom; 
                        panel1.Controls.Add(text); //добавляем на панель
                        textboxes.Add(text); //запоминаем созданный текст бокс
                    }
                }
            }

//где-то на этапе после введения данных в поля, далеко в программе
//..... в некой функции
foreach(TextBox item in textboxes)
{
      item.Text; // ну что-то делаем с текстом, если он есть конечно
}


в вашем же коде наличиствуют ошибки и явное не понимание того, с чем вы работаете  smile 
зачем вам список текстовых полей, если в него вы ни чего не добавили?
зачем вам массив строк размером с пустой список, там не будет ни одного элемента.
зачем вам счетчик increment?
и на панель вы добавили только одно текстовое поле...
PM MAIL   Вверх
KelTron
Дата 7.2.2010, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 11
Всего: 38



Цитата(kozhura @  7.2.2010,  19:45 Найти цитируемый пост)
обработки текстовых полей сделал так

Что подразумевается под обработкой? 

Также непонятно зачем нужен это код:
Код

List<TextBox> mytextboxs = new List<TextBox>();
                        string[] result = new string[mytextboxs.Count()];
                        int increment = 0;
                        foreach (TextBox textbox in mytextboxs)
                        {
                            result[increment] = textbox.Text;
                            increment++;
                            
                        }

Он какой то бессмысленный...

Если нужно собрать значения со всех текстбоксов и поместить в список, то так:
Код

List<string> mystring = new List<string>();
foreach (Control mycontrol in panel1.Controls)
{
    if (mycontrol is TextBox) 
    {
        mystring.Add(mycontrol.Text);
    }
}




--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
kozhura
Дата 9.2.2010, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 14.3.2009

Репутация: нет
Всего: нет



Ceiceron, 
KelTron, 
не получается:( запись в файл не удается 
Код

private void textBox1_TextChanged(object sender, EventArgs e)
        {


            if (!String.IsNullOrEmpty(textBox1.Text))
            {
                List<string> mstring = new List<string>();
                int count_boxes = 0;
                if (int.TryParse(textBox1.Text, out count_boxes)) 
                {
                   
                    panel1.Controls.Clear(); 
                    for (int i = 0; i < count_boxes; i++) 
                    {
                        TextBox text = new TextBox(); 
                        text.Show();
                        text.Width = panel1.Width;
                        text.Dock = DockStyle.Bottom;
                        text.AcceptsTab = true;
                        panel1.Controls.Add(text); 

                        for (int k = 0; k < panel1.Controls.Count; k++)
                        {
                            if (panel1.Controls[k] is TextBox)
                            {
                                mstring.Add(panel1.Controls[k].Text);
                                using (TextWriter streamWriter = new StreamWriter("temp.tmp"))
                                {
                                    //////////////////
                                }
                            }
                        }


                    }
                }
            }

PM MAIL   Вверх
KelTron
Дата 9.2.2010, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 11
Всего: 38



Чем скорее ты адекватно сформулируешь вопрос, тем быстрее получишь ответ. 


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
kozhura
Дата 9.2.2010, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 14.3.2009

Репутация: нет
Всего: нет



KelTron, 
Хорошо smile собственно динамические поля создали, теперь с каждого поля надо скопировать введенные данные и записать их используя TextWriter в файл
PM MAIL   Вверх
wester
Дата 9.2.2010, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 27.2.2009

Репутация: 3
Всего: 13



kozhura, 
написал ж (KelTron), как в Panel перебрать все текстбоксы 
Код

List<string> mystring = new List<string>();
foreach (Control mycontrol in panel1.Controls) // перебираем все контролы в Panel
{
    if (mycontrol is TextBox) // проверяем является ли контрол TextBox
    {
        mystring.Add(mycontrol.Text); // если да, то мы копируем поле Text , в список mystring
    }
}

код для записи списка в текстовый файл написать ?

PM MAIL   Вверх
kozhura
Дата 9.2.2010, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 14.3.2009

Репутация: нет
Всего: нет



wester, 
напишите пожалуйста, если вам не составит труда smile так уже будет легче разобраться везде во всем 
PM MAIL   Вверх
wester
Дата 9.2.2010, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 27.2.2009

Репутация: 3
Всего: 13



кстати , а TextWriter абстрактный если мне не изменяет память.
вот тут примеры в msdn 
http://msdn.microsoft.com/ru-ru/library/sy...ringwriter.aspx
http://msdn.microsoft.com/ru-ru/library/sy...reamwriter.aspx
PM MAIL   Вверх
KelTron
Дата 9.2.2010, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 11
Всего: 38



Полученный список можно записать так:
Код

System.IO.File.WriteAllLines("имя файла", mystring.ToArray());


Только это надо делать не в том же обработчике, что и создание как у тебя сейчас, а то белиберда будет.
Делай это при нажатии на кнопку, например.

Это сообщение отредактировал(а) KelTron - 9.2.2010, 21:46


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
kozhura
Дата 9.2.2010, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 14.3.2009

Репутация: нет
Всего: нет



KelTron

понял, попробую привязать к Button.Click+= new EventHandler

Это сообщение отредактировал(а) kozhura - 9.2.2010, 22:04
PM MAIL   Вверх
kozhura
Дата 9.2.2010, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 14.3.2009

Репутация: нет
Всего: нет



сделал, пишет 6 байт в файле 0A0D0A0D и т.д, текст писаться не хочет :( через нажатие кнопки попробывал - бесполезно, что можно сделать еще?
PM MAIL   Вверх
wester
Дата 9.2.2010, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 27.2.2009

Репутация: 3
Всего: 13



kozhura, 
полный сорец того что сделал опубликуй
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0585 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.