Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Web, ASP.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.79/29: Рейтинг темы: голосов - 29, средняя оценка - 4.79
californis
0 / 0 / 1
Регистрация: 28.09.2008
Сообщений: 298
1

Динамическое добавление контрола

28.04.2012, 18:08. Просмотров 5300. Ответов 12
Метки нет (Все метки)

создаю динамический контрол и добавляю его на форму.
C#
1
2
TextBox textBox1= new TextBox();
Controls.Add(textBox1);
как должно быть правильно?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2012, 18:08
Ответы с готовыми решениями:

Добавление контрола динамически
Как правильно динамически добавлять контролы в контент panel1 и прикручивать к...

Динамическое добавление данных
Добрый день! Хочу узнать, как можно реализовать динамическое добавление на...

MasterPage динамическое добавление
Доброго Времени Суток. Вводные: .aspx C# имеется эталонная страница...

Динамическое добавление календаря
Добрый день! По щелчку кнопки добавляю на страницу календарь public partial...

Динамическое добавление контролов
Клипаю что-то наподобие сайта с новостями. Нужно добавить возможность...

12
bazile
65 / 41 / 68
Регистрация: 15.03.2007
Сообщений: 6,909
29.04.2012, 10:56 2
Вроде все правильно. Создал контрол и добавил его. Разве что позицию его еще надо задать, если у тебя приложение Windows Forms.
0
californis
0 / 0 / 1
Регистрация: 28.09.2008
Сообщений: 298
29.04.2012, 12:28  [ТС] 3
bazile, приложение веб форм (я потому и написал в топике асп.нет)
однако не показывает контрол. мне кажется надо добавить runat=server
но каким образом? в св-х ничего подобного нет. контрол создаю динамечески
0
bazile
65 / 41 / 68
Регистрация: 15.03.2007
Сообщений: 6,909
29.04.2012, 12:33 4
Цитата Сообщение от californis
bazile, приложение веб форм (я потому и написал в топике асп.нет)
Логично

Цитата Сообщение от californis
однако не показывает контрол. мне кажется надо добавить runat=server
но каким образом? в св-х ничего подобного нет. контрол создаю динамечески
runat=server здесмь ни при чем, этот атрибут нужен только парсеру aspx страниц чтобы отличать серверные контролы.
В каком месте ты делаешь вызов Controls.Add?
0
californis
0 / 0 / 1
Регистрация: 28.09.2008
Сообщений: 298
29.04.2012, 12:59  [ТС] 5
Цитата Сообщение от bazile
Цитата Сообщение от californis
bazile, приложение веб форм (я потому и написал в топике асп.нет)
Логично

Цитата Сообщение от californis
однако не показывает контрол. мне кажется надо добавить runat=server
но каким образом? в св-х ничего подобного нет. контрол создаю динамечески
runat=server здесмь ни при чем, этот атрибут нужен только парсеру aspx страниц чтобы отличать серверные контролы.
В каком месте ты делаешь вызов Controls.Add?
в Init.
ругается что должен быть заключен в тег runat...а как его сделать динамечески?
0
bazile
65 / 41 / 68
Регистрация: 15.03.2007
Сообщений: 6,909
29.04.2012, 13:21 6
Цитата Сообщение от californis
ругается что должен быть заключен в тег runat...а как его сделать динамечески?
Тебе наверняка выдается ошибка вида "Control '_ctl1' of type 'TextBox' must be placed inside a form tag with runat=server". То есть, что TextBox нужно добавлять внутрь серверной формы. Это очевидно не означает что нужно атрибут runat к TextBox добавить!

Для этого надо или уже иметь серверную форму на странице с известным id
C#
1
2
3
4
5
6
7
8
<form id="form1" runat="server">
...
</form>
protected override void OnInit(EventArgs e)
{
    TextBox textBox1 = new TextBox();
    form1.Controls.Add(textBox1);
}
Или нужно создать серверную форму "на лету"
C#
1
2
3
4
5
6
7
protected override void OnInit(EventArgs e)
{
    HtmlForm f = new HtmlForm();
    TextBox textBox1= new TextBox();
    f.Controls.Add(textBox1);
    Controls.Add(f);
}
0
californis
0 / 0 / 1
Регистрация: 28.09.2008
Сообщений: 298
29.04.2012, 13:30  [ТС] 7
1. когда я создаю проект у меня уже есть форма, по умолчанию названная Form1
т.е. вот что я вижу:
HTML5
1
2
        <form id="Form1" method="post" runat="server">
        </form>
но при попытке использовать в коде Form1 оно это не понимает.

2.
при использовании варианта

C#
1
2
3
4
HtmlForm f = new HtmlForm();
TextBox textBox1= new TextBox();
f.Controls.Add(textBox1);
Controls.Add(f);
компиляция проходит...но ничего не отображается, хотя visible стоит в true.
и непонятно, эта новая форма f , а что с той Form1 ?
0
bazile
65 / 41 / 68
Регистрация: 15.03.2007
Сообщений: 6,909
29.04.2012, 13:44 8
Цитата Сообщение от californis
1. когда я создаю проект у меня уже есть форма, по умолчанию названная Form1
т.е. вот что я вижу:
<form id="Form1" method="post" runat="server
</form>
но при попытке использовать в коде Form1 оно это не понимает.
Значит надо объявить переменную нужного типа
protected HtmlForm Form1;

И, californis, учись нормально вопросы формулировать! Под фразой "оно это не понимает" может что угодно скрываться. Пиши ясно кто "не понимает" и что при этом происходит. Например, при компиляции проекта Visual Studio выдает ошибку такую-то.

Цитата Сообщение от californis
2.
при использовании варианта

HtmlForm f = new HtmlForm();
TextBox textBox1= new TextBox();
f.Controls.Add(textBox1);
Controls.Add(f);

компиляция проходит...но ничего не отображается, хотя visible стоит в true.
и непонятно, эта новая форма f , а что с той Form1 ?
Странно. Вообще-то должна была возникнуть ошибка на этапе выполнения, что на странице может быть только одна форма с runat="server". Ладно, не морочь себе пока голову и разберись сначала с первым вариантом.
0
californis
0 / 0 / 1
Регистрация: 28.09.2008
Сообщений: 298
29.04.2012, 13:57  [ТС] 9
спасибо bazile, все заработало
0
californis
0 / 0 / 1
Регистрация: 28.09.2008
Сообщений: 298
29.04.2012, 14:31  [ТС] 10
bazile, еще такой вопрос.
если делаю на cs - все ок
но на vb.net следующая проблема:

vb.net
1
2
3
4
5
6
7
8
9
10
11
12
Dim Form1 As HtmlForm
Dim textbox1 As TextBox
 
Private Sub Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
        
        Dim textbox1 As TextBox
 
        textbox1 = New TextBox
        textbox1.ID = "text1"
 
        Form1.Controls.Add(textbox1)
    End Sub
выскакивает сообщение Object reference not set to an instance of an object
странно, но ведь я создал экземпляр объекта...
0
bazile
65 / 41 / 68
Регистрация: 15.03.2007
Сообщений: 6,909
29.04.2012, 14:52 11
Ошибка скорее относится к строке Form1.Controls.Add(textbox1)
Попробуй добавить к объявлению Dim Form1 As HtmlForm модификатор Protected
0
californis
0 / 0 / 1
Регистрация: 28.09.2008
Сообщений: 298
29.04.2012, 15:05  [ТС] 12
да, спасибо. заработало. я объявлял его через private...почему то private не понравилось...
0
bazile
65 / 41 / 68
Регистрация: 15.03.2007
Сообщений: 6,909
29.04.2012, 15:11 13
При запросе ASPX страницы среда исполнения создает "обертку" вокруг твоего класса в виде класса-наследника. Этот класс выполняет (среди много другого) связывание переменных внутри твоего класса с элементами управления на странице сопоставляя их по id. Этот класс (как и любой другой) не имеет доступа к private переменным родительского класса - отсюда и ошибка.
0
29.04.2012, 15:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.04.2012, 15:11

Динамическое добавление HTML
Здравствуйте. Имеется ASPX-страница на AJAX и CS-код. ASPX страница...

Динамическое добавление контролов!
Здравствуйте Уважаемые!Меня интересует вопрос, как при динамическом добавлении...

Динамическое добавление элементов формы
Есть что-то аля: &lt;asp:Table ID=&quot;myTable&quot; runat=&quot;server&quot; Width=&quot;100%&quot;&gt; ...


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

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

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