RaiseComponentChanged требует как oldValue, так и newValue для ссылочного типа.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Гость
 RaiseComponentChanged требует как oldValue, так и newValue для ссылочного типа.

Сообщение Гость »


Я создаю собственный дизайнер для своего MainTabControl (расширенный TabControl). В методе OnAddTab я изменяю TabPageCollection, добавляя к нему новую вкладку.

Как указать oldValue для RaiseComponentChanged? TabPageCollection — это ссылочный тип.

ПС. Я знаю о глубоком копировании, но ищу лучшее решение.

Документация:
TabPageCollection

RaiseComponentChanged
публичный класс MainTabControlDesigner: ControlDesigner { DesignerVerbCollection _verbs; IDesignerHost _designerHost; //... общедоступное переопределение глаголов DesignerVerbCollection { получать { если (_verbs == ноль) { _verbs = новая коллекция DesignerVerbCollection() { новый DesignerVerb("Добавить вкладку", новый EventHandler(OnAddTab)), новый DesignerVerb («Удалить вкладку», новый EventHandler (OnRemoveTab)) }; MainTabControl mainTabControl = Управление как MainTabControl; если (mainTabControl != ноль) { если (mainTabControl.TabPages.Count == 0) _verbs[1].Enabled = false; иначе _verbs[1].Enabled = true; } } вернуть _глаголы; } } public void OnAddTab (отправитель объекта, EventArgs e) { MainTabControl родительскийКонтроль = Управление как MainTabControl; MainTabControl.TabPageCollection oldTabs = родительскийControl.TabPages; Транзакция DesignerTransaction = null; пытаться { транзакция = _designerHost.CreateTransaction («Добавить вкладку»); RaiseComponentChanging(TypeDescriptor.GetProperties(parentControl)["TabPages"]); MainTabPage newPage = (MainTabPage)_designerHost.CreateComponent(typeof(MainTabPage)); новаяСтраница.Текст = новаяСтраница.Имя; родительскийControl.TabPages.Add(новая страница); родительскийControl.SelectedTab = новая страница; RaiseComponentChanged(TypeDescriptor.GetProperties(parentControl)["TabPages"], oldTabs, родительскийControl.TabPages); транзакция.Зафиксировать(); } ловить { MessageBox.Show("При добавлении вкладки произошло исключение"); транзакция?.Отмена(); } } //... }
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»