Используйте это: https://github.com/marceloviana/allBranches
С единственной командой, загрузите все ответвления.
Синтаксис:
~$ allBranches /var/www/meuprojeto1/
Хорошо, а пока я пообедал и сам написал редактор. Не было такого большого усилия. Я был бы рад поделиться, если это поможет.
Edit: Solution Summary
Я написал редактор (см. Снимок экрана), который рекурсивно перечисляет все элементы управления, найденные в форме, в виде дерева. Если для элементов управления установлены свойства Text или Image, отображается текст / изображение. Пользователь может выбрать несколько элементов управления с помощью флажков и даже отфильтровать список, чтобы отображать элементы управления только определенных типов.
(Однако я должен признать, что, поскольку этот редактор был предназначен только для внутреннего использования, я не стал проверять наличие свойство изображения в целом, я просто обрабатываю пару хорошо известных типов элементов управления.)
Код в форме редактора действительно предназначен только для пользовательского интерфейса, отвечающего за заполнение дерева, установка проверок в списке предварительно выбранных элементов управления и возврат списка выбранных элементов управления, когда пользователь закрывает форму с помощью 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-файл; загрузите его здесь .
Как я упоминал ранее, это было просто быстрое и грязное решение, предназначенное только для внутреннего использования. Все равно я