Редактор времени проектирования поддерживает для набора средств управления

Используйте это: https://github.com/marceloviana/allBranches

С единственной командой, загрузите все ответвления.

Синтаксис:

~$ allBranches /var/www/meuprojeto1/

5
задан Tom Juergens 3 September 2009 в 14:25
поделиться

1 ответ

Хорошо, а пока я пообедал и сам написал редактор. Не было такого большого усилия. Я был бы рад поделиться, если это поможет.

Edit: Solution Summary

Я написал редактор (см. Снимок экрана), который рекурсивно перечисляет все элементы управления, найденные в форме, в виде дерева. Если для элементов управления установлены свойства Text или Image, отображается текст / изображение. Пользователь может выбрать несколько элементов управления с помощью флажков и даже отфильтровать список, чтобы отображать элементы управления только определенных типов.

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

alt text

Код в форме редактора действительно предназначен только для пользовательского интерфейса, отвечающего за заполнение дерева, установка проверок в списке предварительно выбранных элементов управления и возврат списка выбранных элементов управления, когда пользователь закрывает форму с помощью OK.

Затем у нас есть класс, реализующий UITypeEditor, который я назвал FormControlSelectionEditor. Этот класс присваивается свойствам, которые мы хотим использовать в редакторе для использования атрибута [Editor]. Он не делает ничего, кроме создания нового экземпляра формы, когда это необходимо, и отображения его в виде модального диалога.

Кроме того, существуют сами свойства, которые имеют тип System.Collections.ObjectModel.ObservableCollection (Of Control) . Я выбрал ObservableCollection, потому что мне нужно реагировать на изменения списков во время выполнения, но другие списки тоже подойдут с небольшой адаптацией.

Я обнаружил, что мне пришлось написать свои свойства и редактор таким образом, чтобы они использовали копии списков элементов управления. Другими словами, код UITypeEditor делает копию списка, хранящегося в свойстве, и передает его в форму редактора (для установки проверок при открытии формы), а когда форма закрывается, я очищаю список поддержки свойства и скопируйте каждый элемент управления в списке, возвращенном редактором. Я обнаружил, что в противном случае у меня были проблемы с сериализацией в файле .designer. Я не верю, что так должно быть; Думаю, это скорее ошибка с моей стороны.

Код типичного свойства:

    Private WithEvents _insertButtons As New System.Collections.ObjectModel.ObservableCollection(Of Control)
    <DesignerSerializationVisibility(DesignerSerializationVisibility.Content)> _
    <Editor(GetType(Design.FormControlSelectionEditor), GetType(UITypeEditor))> _
    Public Property InsertButtons() As System.Collections.ObjectModel.ObservableCollection(Of Control)
        Get
            Return _insertButtons
        End Get
        Set(ByVal value As System.Collections.ObjectModel.ObservableCollection(Of Control))
            If value Is Nothing Then
                RemoveInsertButtonEventHandlers(_insertButtons)
                _insertButtons.Clear()
            Else
                ' Copy the list items passed in into the internal list
                For i As Integer = _insertButtons.Count - 1 To 0 Step -1
                    If Not value.Contains(_insertButtons.Item(i)) Then _insertButtons.RemoveAt(i)
                Next
                For Each ctl As Control In value
                    If Not _insertButtons.Contains(ctl) Then _insertButtons.Add(ctl)
                Next
            End If
        End Set
    End Property
    Private Function ShouldSerializeInsertButtons() As Boolean
        Return _insertButtons.Count > 0
    End Function
    Private Sub ResetInsertButtons()
        InsertButtons = Nothing
    End Sub

Я поместил редактор в zip-файл; загрузите его здесь .

Как я упоминал ранее, это было просто быстрое и грязное решение, предназначенное только для внутреннего использования. Все равно я

4
ответ дан 15 December 2019 в 01:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: