В конструкторе нельзя использовать проверку свойства DesignTime, т.к. реально оно возвращает (Site != null). Но в конструкторе компонент еще не привязан и DesignTime всегда будет возвращать false.
Собственный компонент
От:
Аноним
Дата:
03.05.08 11:42
Оценка:
Создаю собственный компонент на базе ListBox-а. Разница лишь в том что мне необходимо в своем компоненте добавить строку. Вот как я это делаю:
public partial class MyEditCtrl : ListBox
{
public MyEditCtrl()
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
//
// TODO: Add constructor code after the InitializeComponent() call.
//
Items.Add("Пример"); //Здесь я добавляю эту строку
}
}
Но после компиляции, когда перетаскиваешь компонент на форму, то слово "Пример" выводится 2 раза. Как с этим бороться?
Код нужно выделять тегами [c#][/c#], да и сгенерированные комментарии нужно удалить.
А>Но после компиляции, когда перетаскиваешь компонент на форму, то слово "Пример" выводится 2 раза. Как с этим бороться?
Это потому, что когда ты бросаешь компонент на форму созданный в конструкторе айтем, сериализуется дизайнером. Поэтому добавляй его так:
if(!DesignMode)
Items.Add("Пример");
... << RSDN@Home 1.2.0 alpha 4 rev. 1083>>
Re[2]: Собственный компонент
От:
Аноним
Дата:
19.05.08 06:02
Оценка:
Здравствуйте, jenyavb, Вы писали:
J>Здравствуйте, <Аноним>, Вы писали:
А>>[...]
J>Код нужно выделять тегами [c#][/c#], да и сгенерированные комментарии нужно удалить.
А>>Но после компиляции, когда перетаскиваешь компонент на форму, то слово "Пример" выводится 2 раза. Как с этим бороться?
J>Это потому, что когда ты бросаешь компонент на форму созданный в конструкторе айтем, сериализуется дизайнером. Поэтому добавляй его так: J>
J>if(!DesignMode)
J> Items.Add("Пример");
J>
В общем в дизайнере стало отображаться одна строка, но во время выполнения все равно выскакивает 2 строки
Здравствуйте, <Аноним>, Вы писали:
А>В общем в дизайнере стало отображаться одна строка, но во время выполнения все равно выскакивает 2 строки
А ты удалил строку в ListBox'е на форме, добавленную старым конструктором?
... << RSDN@Home 1.2.0 alpha 4 rev. 1083>>
Re[4]: Собственный компонент
От:
Аноним
Дата:
20.05.08 06:57
Оценка:
Здравствуйте, jenyavb, Вы писали:
J>Здравствуйте, <Аноним>, Вы писали:
А>>В общем в дизайнере стало отображаться одна строка, но во время выполнения все равно выскакивает 2 строки
J>А ты удалил строку в ListBox'е на форме, добавленную старым конструктором?
Удалил, в общем все сделал, перекомпилил, заново на форму компонент кинул — в итоге в дизайнере все тип-топ, а во время выполнения вот такая ерунда...
Здравствуйте, <Аноним>, Вы писали:
А>Удалил, в общем все сделал, перекомпилил, заново на форму компонент кинул — в итоге в дизайнере все тип-топ, а во время выполнения вот такая ерунда...
Здравствуйте, jenyavb, Вы писали:
J>Здравствуйте, <Аноним>, Вы писали:
А>>Удалил, в общем все сделал, перекомпилил, заново на форму компонент кинул — в итоге в дизайнере все тип-топ, а во время выполнения вот такая ерунда...
J> давай код, повторяющий такое поведение.
public partial class MyEditCtrl : ListBox
{
public MyEditCtrl()
{
InitializeComponent();
if(!this.DesignMode)
{
Items.Add("Пример");
}
}
}
Здравствуйте, jenyavb, Вы писали:
J>Здравствуйте, waider, Вы писали:
W>>[...]
J>Сорри, действительно, через конструктор тоже добавляется... J>Тогда замени конструктор на: J>
J>Здравствуйте, waider, Вы писали: W>>Ха, теперь в рантайме все ОК, зато в дизайнере пусто J>Так и должно быть.
В дизайнере можно делать так:
public override ISite Site
{
get
{
return base.Site;
}
set
{
base.Site = value;
[c#]
// Заполняем listboxfor (int i = 0; i < 100; i++)
listBox1.Items.Add(i.ToString());