Hallo,
ich bin gerade dabei ein benutzerdefiniertes Steuerelement in einem Projekt Windows-Steuerelementbibliothek zu erstellen. Mit folgendem Attribut habe ich vor, für eine meiner selber geschriebenen Eigenschaften des Steuerelements einen OpenFileDialog eingefügt, damit ich die Dateinamen, die die Eigenschaft erwartet, nicht immer von Hand eingeben muss. Das ganze funktioniert auch soweit problemfrei .
Wenn ich aber möchte, dass ich über den OpenFileDialog nur bestimmte Dateien wie z.B. Text-Dateien zur Auswahl bekomme, so war ich der Meinung richtig vorzugehen, wenn ich die Klasse „UITypeEditor“ vererbe, die Eigenschaften „EditValue“ und „GetEditStyle“ wie folgt überschreibe...
<PRE>Imports System.Design
Imports System.Drawing.Design
Imports System.Windows.Forms.Design
Imports System.ComponentModel
Public Class UserControl1
Inherits System.Windows.Forms.UserControl
Dim UiType As New UITypeEditor()
'Das zweite Argument "UITypeEditor" durch die von "UITypeEditor" abgeleitete Klasse ersetzt:
<Editor(GetType(FileNameEditor), GetType(DateiNameUITypeEditor))> _
Public Property DateiName() As String
Get
End Get
Set(ByVal Value As String)
End Set
End Property
'Weiterer Code............................
#Region " Vom Windows Form Designer generierter Code "
End Class
'Anpassen des zu verwendenden Editors, damit nur TextDateien angez. werden:
Class DateiNameUITypeEditor : Inherits UITypeEditor
Public Overloads Overrides Function EditValue(ByVal context As ITypeDescriptorContext, _
ByVal provider As IServiceProvider, _
ByVal value As Object) _
As Object
Dim Result As String = value.ToString
Dim dlg As OpenFileDialog = New OpenFileDialog()
With dlg
.Title = "Wählen Sie eine Textdatei"
.Filter = "TextDatei|*.txt"
.FileName = Result '-Könnte was fehlen!!
End With
If dlg.ShowDialog = DialogResult.OK Then
Result = dlg.FileName
End If
Return Result '-Rückgabe eines Strings als Object!?!
End Function
Public Overloads Overrides Function GetEditStyle(ByVal context As ITypeDescriptorContext) _
As UITypeEditorEditStyle
Return UITypeEditorEditStyle.Modal
End Function
End Class</PRE>
... und dann im vor der Eigenschaft platzierten Attribut „EditorAttribute“ das Argument „UITypeEditor“ durch den Namen der hievon im selben Projekt abgeleiteten Klasse „DateiNameUITypeEditor“ zu ersetzen.
Wenn ich so vorgehe, zeigt sich im Eigenschaftenfenster bei der Eigenschaft „DateiName“ allerdings keinerlei
Editor mehr; was mache ich falsch bzw. was habe ich nicht beachtet?
Vielen Dank für Eure Hilfe
regards Lars
ich bin gerade dabei ein benutzerdefiniertes Steuerelement in einem Projekt Windows-Steuerelementbibliothek zu erstellen. Mit folgendem Attribut habe ich vor, für eine meiner selber geschriebenen Eigenschaften des Steuerelements einen OpenFileDialog eingefügt, damit ich die Dateinamen, die die Eigenschaft erwartet, nicht immer von Hand eingeben muss. Das ganze funktioniert auch soweit problemfrei .
Wenn ich aber möchte, dass ich über den OpenFileDialog nur bestimmte Dateien wie z.B. Text-Dateien zur Auswahl bekomme, so war ich der Meinung richtig vorzugehen, wenn ich die Klasse „UITypeEditor“ vererbe, die Eigenschaften „EditValue“ und „GetEditStyle“ wie folgt überschreibe...
<PRE>Imports System.Design
Imports System.Drawing.Design
Imports System.Windows.Forms.Design
Imports System.ComponentModel
Public Class UserControl1
Inherits System.Windows.Forms.UserControl
Dim UiType As New UITypeEditor()
'Das zweite Argument "UITypeEditor" durch die von "UITypeEditor" abgeleitete Klasse ersetzt:
<Editor(GetType(FileNameEditor), GetType(DateiNameUITypeEditor))> _
Public Property DateiName() As String
Get
End Get
Set(ByVal Value As String)
End Set
End Property
'Weiterer Code............................
#Region " Vom Windows Form Designer generierter Code "
End Class
'Anpassen des zu verwendenden Editors, damit nur TextDateien angez. werden:
Class DateiNameUITypeEditor : Inherits UITypeEditor
Public Overloads Overrides Function EditValue(ByVal context As ITypeDescriptorContext, _
ByVal provider As IServiceProvider, _
ByVal value As Object) _
As Object
Dim Result As String = value.ToString
Dim dlg As OpenFileDialog = New OpenFileDialog()
With dlg
.Title = "Wählen Sie eine Textdatei"
.Filter = "TextDatei|*.txt"
.FileName = Result '-Könnte was fehlen!!
End With
If dlg.ShowDialog = DialogResult.OK Then
Result = dlg.FileName
End If
Return Result '-Rückgabe eines Strings als Object!?!
End Function
Public Overloads Overrides Function GetEditStyle(ByVal context As ITypeDescriptorContext) _
As UITypeEditorEditStyle
Return UITypeEditorEditStyle.Modal
End Function
End Class</PRE>
... und dann im vor der Eigenschaft platzierten Attribut „EditorAttribute“ das Argument „UITypeEditor“ durch den Namen der hievon im selben Projekt abgeleiteten Klasse „DateiNameUITypeEditor“ zu ersetzen.
Wenn ich so vorgehe, zeigt sich im Eigenschaftenfenster bei der Eigenschaft „DateiName“ allerdings keinerlei
Editor mehr; was mache ich falsch bzw. was habe ich nicht beachtet?
Vielen Dank für Eure Hilfe
regards Lars