Собственный компонент
От: Аноним  
Дата: 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 раза. Как с этим бороться?
Re: Собственный компонент
От: jenyavb  
Дата: 03.05.08 14:15
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>[...]


Код нужно выделять тегами [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 строки
Re[3]: Собственный компонент
От: jenyavb  
Дата: 19.05.08 06:29
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>В общем в дизайнере стало отображаться одна строка, но во время выполнения все равно выскакивает 2 строки


А ты удалил строку в ListBox'е на форме, добавленную старым конструктором?
... << RSDN@Home 1.2.0 alpha 4 rev. 1083>>
Re[4]: Собственный компонент
От: Аноним  
Дата: 20.05.08 06:57
Оценка:
Здравствуйте, jenyavb, Вы писали:

J>Здравствуйте, <Аноним>, Вы писали:


А>>В общем в дизайнере стало отображаться одна строка, но во время выполнения все равно выскакивает 2 строки


J>А ты удалил строку в ListBox'е на форме, добавленную старым конструктором?


Удалил, в общем все сделал, перекомпилил, заново на форму компонент кинул — в итоге в дизайнере все тип-топ, а во время выполнения вот такая ерунда...
Re[5]: Собственный компонент
От: jenyavb  
Дата: 21.05.08 14:53
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Удалил, в общем все сделал, перекомпилил, заново на форму компонент кинул — в итоге в дизайнере все тип-топ, а во время выполнения вот такая ерунда...


давай код, повторяющий такое поведение.
... << RSDN@Home 1.2.0 alpha 4 rev. 1083>>
Re[6]: Собственный компонент
От: waider  
Дата: 24.05.08 12:12
Оценка:
Здравствуйте, jenyavb, Вы писали:

J>Здравствуйте, <Аноним>, Вы писали:


А>>Удалил, в общем все сделал, перекомпилил, заново на форму компонент кинул — в итоге в дизайнере все тип-топ, а во время выполнения вот такая ерунда...


J> давай код, повторяющий такое поведение.



public partial class MyEditCtrl : ListBox
    {
        public MyEditCtrl()
        {
            InitializeComponent();

            if(!this.DesignMode)
            {    
                Items.Add("Пример");
            }
        }
    }
Re[7]: Собственный компонент
От: jenyavb  
Дата: 25.05.08 05:03
Оценка:
Здравствуйте, waider, Вы писали:

W>[...]


Сорри, действительно, через конструктор тоже добавляется...
Тогда замени конструктор на:
protected override void OnCreateControl()
{
    if (!DesignMode)
        Items.Add("Пример");

    base.OnCreateControl();
}
... << RSDN@Home 1.2.0 alpha 4 rev. 1083>>
Re[7]: Собственный компонент
От: Pavel_Agurov Россия  
Дата: 25.05.08 07:11
Оценка: 1 (1)
W>
W>public partial class MyEditCtrl : ListBox
W>    {
W>        public MyEditCtrl()
W>        {
W>            InitializeComponent();

W>            if(!this.DesignMode)
W>            {    
W>                Items.Add("Пример");
W>            }
W>        }
W>    }
W>


В конструкторе нельзя использовать проверку свойства DesignTime, т.к. реально оно возвращает (Site != null). Но в конструкторе компонент еще не привязан и DesignTime всегда будет возвращать false.
Re[8]: Собственный компонент
От: waider  
Дата: 25.05.08 12:05
Оценка:
Здравствуйте, jenyavb, Вы писали:

J>Здравствуйте, waider, Вы писали:


W>>[...]


J>Сорри, действительно, через конструктор тоже добавляется...

J>Тогда замени конструктор на:
J>
J>protected override void OnCreateControl()
J>{
J>    if (!DesignMode)
J>        Items.Add("Пример");

J>    base.OnCreateControl();
J>}
J>


Ха, теперь в рантайме все ОК, зато в дизайнере пусто
Re[9]: Собственный компонент
От: jenyavb  
Дата: 26.05.08 08:14
Оценка:
Здравствуйте, waider, Вы писали:

W>Ха, теперь в рантайме все ОК, зато в дизайнере пусто


Так и должно быть.
... << RSDN@Home 1.2.0 alpha 4 rev. 1090>>
Re[10]: Собственный компонент
От: Pavel_Agurov Россия  
Дата: 26.05.08 09:04
Оценка:
J>Здравствуйте, waider, Вы писали:
W>>Ха, теперь в рантайме все ОК, зато в дизайнере пусто
J>Так и должно быть.

В дизайнере можно делать так:


    public override ISite Site
    {
      get
      {
        return base.Site;
      }
      set
      {
        base.Site = value;

        
[c#]
        // Заполняем listbox
        for (int i = 0; i < 100; i++)
          listBox1.Items.Add(i.ToString());


}
}
[/c#]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.