OK, 그래서 나는 점심을 먹었고 편집인을 직접 작성했습니다. 그렇게 대단한 노력은 아니 었습니다. 도움이된다면 나눌 수있어 기쁩니다.
편집 : 솔루션 개요
나는 재귀 적으로 트 리뷰에서 양식에있는 모든 컨트롤을 나열하는 편집기 (스크린 샷 참조) 썼다. 컨트롤에 텍스트 또는 이미지 속성이 설정되어 있으면 텍스트/이미지가 표시됩니다. 사용자는 확인란이있는 여러 컨트롤을 선택하고 목록을 필터링하여 특정 유형의 컨트롤 만 표시 할 수도 있습니다.
(이 편집기는 내부 용으로 만 사용되었으므로 일반적으로 이미지 속성을 확인하는 데 신경 쓰지 않고 잘 알려진 몇 가지 컨트롤 유형을 처리합니다.)
alt text http://i37.tinypic.com/154enpw.png
에디터 형태의 코드, 그냥 UI 정말 사용자가 양식을 닫을 때 선택한 컨트롤의 목록을 트리를 작성 미리 선택된 컨트롤 목록에 검사를 설정하고 반환 할 책임 OK로.
다음으로 FormControlSelectionEditor라는 UITypeEditor를 구현하는 클래스가 있습니다. 이 클래스는 [Editor] 속성을 사용하기 위해 에디터를 사용할 속성에 할당됩니다. 필요한 경우 폼의 새 인스턴스를 만들고 모달 대화 상자로 표시하는 것 이상을 수행하지 않습니다.
그런 다음 System.Collections.ObjectModel.ObservableCollection (Of Control) 유형의 속성이 있습니다. ObservableCollection을 선택한 이유는 런타임에 목록에 대한 변경 사항에 반응해야하기 때 문 이었지만 다른 목록은 사소한 수정 작업에서도 마찬가지였습니다.
내가 발견 한 한 가지 점은 컨트롤 목록을 사용하도록 속성과 편집기를 작성해야한다는 것입니다. 즉, UITypeEditor 코드는 속성에 저장된 목록의 사본을 만들어 양식이 열릴 때 수표를 설정하기 위해 편집기 양식에 전달하고 양식을 닫으면 속성의지지 목록을 지우고 편집기에서 반환 된 목록의 각 컨트롤을 복사합니다. 그렇지 않으면 .designer 파일의 serialization에 문제가있는 것으로 나타났습니다. 나는 그것이 이런 방식이어야한다고 믿지 않는다. 나는 그것이 내 편이 더 오류라고 생각한다.일반적인 속성에 대한
코드 : 나는 zip 파일로 편집기를 넣었습니다
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
; download it here.
앞에서 언급했듯이 이것은 내부 용으로 만 사용되는 빠른 & 더티 솔루션입니다. 모두 똑같은, 개선을위한 제안을 주시면 감사하겠습니다.