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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамическое создание Controls, asp.net 
:(
    Опции темы
stron
Дата 15.5.2005, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Консультант
***


Профиль
Группа: Комодератор
Сообщений: 1654
Регистрация: 17.7.2003
Где: Питер

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



Как задать место расположение динамически создаваемого визуального компонента?

Код

System.Web.UI.WebControls.Label[] LabelArray;
..................
this.LabelArray = new System.Web.UI.WebControls.Label[k];
for (int i=0; i<k; i++)
{
         LabelArray[i] = new System.Web.UI.WebControls.Label();
         LabelArray[i].Text = "w " + Convert.ToString(i+1);
         this.Controls.Add(LabelArray[i]);
}

Всё хорошо, метка создаётся, добавляется на страницу.
Но как указать куда её надо добавить?
Напр., мне её надо добавить на 150 пикселей ниже верха страницы.


--------------------
подписи нет
PM ICQ   Вверх
stron
Дата 15.5.2005, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Консультант
***


Профиль
Группа: Комодератор
Сообщений: 1654
Регистрация: 17.7.2003
Где: Питер

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



Да, видимо, весь дизайн придётся самому создавать динамически
через Response.Write


--------------------
подписи нет
PM ICQ   Вверх
-ser-
Дата 16.5.2005, 04:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Может с WebControls дела обстоят иначе, но обычно это указывается в Location
Код

System.Web.UI.WebControls.Label[] LabelArray;
..................
this.LabelArray = new System.Web.UI.WebControls.Label[k];
for (int i=0; i<k; i++)
{
         LabelArray[i] = new System.Web.UI.WebControls.Label();
         LabelArray[i].Text = "w " + Convert.ToString(i+1);
         LabelArray[i].Location = new Point( i*20, 150 );
         this.Controls.Add(LabelArray[i]);
}



--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
stron
Дата 16.5.2005, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Консультант
***


Профиль
Группа: Комодератор
Сообщений: 1654
Регистрация: 17.7.2003
Где: Питер

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



-ser-
В том-то и дело, что там нет такого параметра!!
Я обошелся так: плюхнул на страницу панель и добавлял контролы в неё.

Я не догадался как в панели делать переход на новую строчку, поэтому делал её wrap=false и добавлял пустой label нужной длинны - изврат


--------------------
подписи нет
PM ICQ   Вверх
ryfm
Дата 20.5.2005, 08:21 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Код

    internal abstract class ControlWrap
    {
        private static Hashtable htControls;

        public static void InitControlWrap()
        {
            htControls = new Hashtable();

            // забъем хэштейбл алиасами
            htControls = new Hashtable();
            htControls.Add("textbox", typeof (TextBox));
            htControls.Add("checkbox", typeof (CheckBox));
            htControls.Add("radiobutton", typeof (RadioButton));
            htControls.Add("dropdownlist", typeof (DropDownList));
            htControls.Add("button", typeof (Button));
            htControls.Add("label", typeof (Label));
        }

        private static void SetAttrs(Control obControl, string stAttr)
        {
            if ("" == stAttr.Trim()) return;

            // разберем свойства
            StringCollection scProps = new StringCollection();

            string[] props = stAttr.Split(";".ToCharArray());

            for (int i = 0; i < props.Length; i++)
            {
                // делим пару (свойство=значение) по знаку "="
                string[] sp = props[i].Split("=".ToCharArray());

                // убираем лишнии кавычки
                sp[0] = sp[0].Trim().Replace("\"", "");
                sp[1] = sp[1].Trim().Replace("\"", "");

                scProps.Add(sp[0]);
                scProps.Add(sp[1]);
            }

            // теперь проставим их для контрола
            // перебираем свойства контрола...
            for (int j = 0; j < scProps.Count; j += 2)
            {
                // если такого свойства у контрола нет, то берем следующее...
                PropertyInfo pi = obControl.GetType().GetProperty(scProps[j]);

                if (null == pi) continue;

                // если в свойство нельзя писать, берем следующее свойство...
                if (!pi.CanWrite) continue;

                // получим тип свойства...
                Type pt = pi.PropertyType;


                // TODO: продумать систему типов в данном случае
                if (pt.Name == "TextBoxMode")
                {
                    if (scProps[j + 1] == "MultiLine")
                        pi.SetValue(obControl, (object) TextBoxMode.MultiLine, null);
                }


                if (pt == typeof (Unit))
                    pi.SetValue(obControl, new Unit(scProps[j + 1]), null);

                if (pt == typeof (Color))
                    pi.SetValue(obControl, Color.FromName(scProps[j + 1]), null);

                if (pt == typeof (Int32))
                    pi.SetValue(obControl, Convert.ToInt32(scProps[j + 1]), null);

                if (pt == typeof (Int16))
                    pi.SetValue(obControl, Convert.ToInt16(scProps[j + 1]), null);

                if (pt == typeof (String))
                    pi.SetValue(obControl, scProps[j + 1], null);

                if (pt == typeof (Boolean))
                    pi.SetValue(obControl, Convert.ToBoolean(scProps[j + 1]), null);

                // TODO: ДОДЕЛАТЬ остальные типы свойств контрола...

            }
        }

        public static object CreateControl(Control ctrl, string stControlType, string stAttr)
        {
            // по алиасу контрола, получим его реальный тип
            object obType = htControls[stControlType.ToLower()];

            // типа нет, выходим
            if (obType == null) return null;

            // создадим объект
            object obNew = Activator.CreateInstance((Type) obType, null);

            // установим для него атрибуты
            SetAttrs((Control) obNew, stAttr);

            // поставим его на форму...
            ctrl.Controls.Add((Control) obNew);

            return obNew;
        }

        public static object GetValue()
        {
            return new object();
        }

        public static object SetValue(string stControlType, object Value)
        {
            return new object();
        }
    }

  Вверх
ryfm
Дата 20.5.2005, 08:22 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Это было quick & dirty решение для одного проекта, думаю ничего сложного...
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

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

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


 




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


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

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