Как обновить значение свойства при использовании uitypeditor
Я создал пользовательский UITypeEditor.
Это настоящий ворлинг ... НО :
Я хочу обновить свойство в вызывающем элементе управления при использовании этого редактора. Мой редактор-это SliderEditor, и при перемещении ползунка свойство должно изменять свое значение.
Мой код таков :
Public Class SliderEditor Inherits UITypeEditor Public Overrides Function GetEditStyle(ByVal context As System.ComponentModel.ITypeDescriptorContext) As System.Drawing.Design.UITypeEditorEditStyle Return UITypeEditorEditStyle.DropDown End Function Private myContext As System.ComponentModel.ITypeDescriptorContext = Nothing Private myPropDescriptor As System.ComponentModel.PropertyDescriptor = Nothing Private Sub editControl_Changed(ByVal sender As Object, ByVal aktPosition As Single) myPropDescriptor.SetValue(myContext.Instance, aktPosition) System.ComponentModel.TypeDescriptor.Refresh(myContext.Instance) End Sub Public Overrides Function EditValue(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal provider As System.IServiceProvider, ByVal value As Object) As Object ' überprüfen, ob der Wert zu verarbeiten ist If value.GetType() IsNot GetType(Double) _ AndAlso value.GetType() IsNot GetType(Single) _ AndAlso value.GetType() IsNot GetType(Integer) Then Return value Exit Function End If ' Service für die Anzeige des DropDown-Editors abrufen Dim editorService As IWindowsFormsEditorService = DirectCast(provider.GetService(GetType(IWindowsFormsEditorService)), IWindowsFormsEditorService) ' Instanz des UserControls erzeugen Dim editControl As New RMBaseSlider() AddHandler editControl.SliderPositionChanged, AddressOf editControl_Changed myContext = context myPropDescriptor = context.PropertyDescriptor Dim pMinMax As Object = context.PropertyDescriptor.Attributes(GetType(PropertyLimitsAttribute)) If pMinMax IsNot Nothing Then Dim myAttribute As PropertyLimitsAttribute = pMinMax editControl.Minimum = myAttribute.minValue editControl.Maximum = myAttribute.maxValue Else editControl.Minimum = 0.0 editControl.Maximum = 5.0 End If ' Wert(e) übergeben editControl.Schrittweite = Math.Ceiling(editControl.Maximum - editControl.Minimum) / 100 editControl.ShowStepButtons = True editControl.Ausgabe = CSng(value) editControl.Width = 210 editControl.Height = 30 ' UserControl als Drop-Down-Editor anzeigen editorService.DropDownControl(editControl) RemoveHandler editControl.SliderPositionChanged, AddressOf editControl_Changed ' den geänderten Wert im ursprünglich übergebenen Format zurückgeben If value.GetType() Is GetType(Double) Then Return CDbl(editControl.Ausgabe) Exit Function ElseIf value.GetType() Is GetType(Single) Then Return CSng(editControl.Ausgabe) Exit Function ElseIf value.GetType() Is GetType(Integer) Then Return CInt(editControl.Ausgabe) Exit Function Else Return value End If ' eingestellten Wert zurückgeben Return editControl.Ausgabe End Function Public Overrides Function GetPaintValueSupported(ByVal context As System.ComponentModel.ITypeDescriptorContext) As Boolean Return False End Function End Class
Что я уже пробовал:
Внутри моего кода я подключил Eventhandler из Rmbaseslider-Control к SliderEditor-методу "editControl_Changed".
Это работает, когда я использую систему "кодовая строка".ComponentModel.В разделе.Обновить (myContext.Пример)
"потому что сетка свойств из вызывающего элемента управления теперь полностью перекрашена. Но и SliderEditor закрыт :(
Я хочу, чтобы значение внутри вызывающего элемента управления менялось при перемещении ползунка.
Есть ли способ достичь этой цели ?
В данный момент у меня нет никакой дополнительной идеи ... :(