Изменить подкласс UserControl в конструкторе форм Windows? - PullRequest
0 голосов
/ 01 июля 2011

В VS2010 с таргетингом на Framework 4.0 у меня есть UserControl, который содержит TableLayoutPanel с пустой второй строкой.

Можно ли добавлять элементы во вторую строку с помощью конструктора Windows Forms или мне нужно делать все это с помощью кода?

РЕДАКТИРОВАТЬ: В ответ на комментарий Ханса Пассанта, связанный вопрос ссылается на UserControl, используемый внутри другого элемента управления. Я задаю вопрос о унаследованных элементах управления.

Я создал следующий тестовый код, где TestControl - это UserControl, содержащий TableLayoutPanel с именем «TableLayoutPanel1»:

Imports System.ComponentModel
Imports System.Windows.Forms.Design

<Designer(GetType(testDesigner))>
Public Class TestControl
End Class

Public Class testDesigner
    Inherits ControlDesigner
    Public Overrides Sub Initialize(component As System.ComponentModel.IComponent)
        MyBase.Initialize(component)
        Dim X As TestControl = CType(component, TestControl)
        EnableDesignMode(X.TableLayoutPanel1, "TableLayoutPanelX")
    End Sub
End Class

Создание следующего класса в новом файле:

Public Class TestInheritedControl
    Inherits TestControl
End Class

создает элемент управления, который при просмотре в конструкторе содержал TableLayoutPanel с именем «TableLayoutPanel1», который не редактируется конструктором. Это ситуация, описанная в моем первоначальном вопросе, которая не решена.

Создание нового UserControl, не наследуя ни от одного из предыдущих UserControls, а затем поместив в него TestControl, создает экземпляр TestControl с редактируемой конструктором TableLayoutPanel с именем «TestControl1.TableLayoutPanelX».

Есть ли способ сделать класс TestInheritedControl, показанный выше, редактируемым для дизайнера?

1 Ответ

0 голосов
/ 04 августа 2011

Мне просто нужно было сделать что-то подобное сегодня.Способ, которым я обошел это, заключается в использовании неинстанцированных ссылок в базовом классе, но в действительности они выполняются в наследующем классе.

Вы должны добавить пару шагов, чтобы все стало полностью подключаемым, но это дает вам необходимый контроль.Вам нужно будет сбросить TableLayoutPanel на каждый наследуемый тип элемента управления, а в конструкторе установить версию базового класса на текущую конкретизированную версию (после вызова initializecomponents).

Таким образом, вы можете «спроектировать» его в элементе управления наследованием, но использовать его программно из базового элемента управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...