Ralf Meier Ответов: 0

Как обновить значение свойства при использовании 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 закрыт :(
Я хочу, чтобы значение внутри вызывающего элемента управления менялось при перемещении ползунка.

Есть ли способ достичь этой цели ?
В данный момент у меня нет никакой дополнительной идеи ... :(

0 Ответов