Sonhja
Sonhja

Reputation: 8458

How to create a custom OpenFiledialog Property for a UserControl

When I right click a UserControl and select Properties, I want to create a custom property inside the UserControl properties that loads a file from an OpenFileDialog, like the ColumnDefinitions, but that browses inside my machine:

enter image description here

How can I achieve that? I've been searching but I'm a bit lost on where to start from.

NOTE: The image indicates that the property I want to create is one of the properties of the UserControl that appear when you Right click->Properties the UserControl.

Thanks!

Upvotes: 0

Views: 944

Answers (2)

Sir Angelo 1989
Sir Angelo 1989

Reputation: 13

I declared a property for searching execuble files in an OpenFileDialog in a WinForm project. The code is in VB .NET.

First create a Class like this:

Imports System.Drawing.Design
Imports System.Windows.Forms.Design
Imports System.Windows.Forms

Public Class ExecutableEditor : Inherits UITypeEditor

    Public Overrides Function GetEditStyle(context As System.ComponentModel.ITypeDescriptorContext) As System.Drawing.Design.UITypeEditorEditStyle
        Return UITypeEditorEditStyle.Modal
    End Function

    Public Overrides Function EditValue(context As System.ComponentModel.ITypeDescriptorContext, provider As System.IServiceProvider, value As Object) As Object
        If context Is Nothing And context.Instance Is Nothing And provider Is Nothing Then
            Return value
        End If

        Dim editor_service As IWindowsFormsEditorService = _
            CType(provider.GetService(GetType(IWindowsFormsEditorService)),  _
                IWindowsFormsEditorService)

        If editor_service Is Nothing Then Return value

        Dim ofdEjecutable As New OpenFileDialog
        ofdEjecutable.Title = "Select an executable file"
        ofdEjecutable.FileName = Nothing
        ofdEjecutable.Filter = "executable file|*.exe"

        If ofdEjecutable.ShowDialog = DialogResult.OK Then
            Return ofdEjecutable.FileName
        Else
            Return Nothing
        End If
    End Function

End Class

Then in the code of the UserControl declare a property like this:

Private _executable As String
<Category("Injection")> _
<EditorAttribute(GetType(ExecutableEditor), GetType(UITypeEditor))> _
Public Property Executable As String
    Get
        Return _executable
    End Get
    Set(value As String)
        _executable = value
    End Set
End Property

Upvotes: 1

Nitin Purohit
Nitin Purohit

Reputation: 18578

What I got from your question is that you want a Browsable Property for you user control. Going by this, for simple .net property add:

    private string myString;
    [Browsable(true)]
    [Category("Other")]
    public string MyProperty { get { return myString; } set { myString = value; } }

and in setter of the property load the file after validation.

If you want it to be dependancy property do the same but move the code of loading the file in the propertychange handler.

Upvotes: 0

Related Questions