Solved

Re-Usable Property values?

Posted on 2006-10-24
5
154 Views
Last Modified: 2012-05-05
I swear I read about this at some point in time but haven't had a great use for it until now and I can't seem to find anything on it anymore.

I want to re-use a SaveFileDialog and an OpenFileDialog.  The initialization properties for both classes are nearly identical.  Is there a way to create a class or a structure or other that could be used to fill the properties?

for example
Public Struct FileDialog
    Filter = "XML Files (*.xml)|*.xml"
    DefaultExt = "XML"
    InitialDirectory = "c:\"
end Struct

Dim SaveFileDialog1 as new SaveFileDialog
Dim OpenFileDialog1 as new OpenFileDialog

SaveFileDialog.Properties = FileDialog 'I just made that up =)

OpenFileDialog.Properties = FileDialog 'The ability to re-use for different objects and to have multiple pre-sets for a single object

TIA
Corey2
0
Comment
Question by:Corey2
5 Comments
 
LVL 9

Expert Comment

by:jrscherer
ID: 17801094
You can not create your own derived class from OpenFileDialog or SaveFileDialog since both are declared NonInheritable.
Otherwise it would have been easy to include a structure into the inherited class.

Jack.net
0
 
LVL 13

Accepted Solution

by:
newyuppie earned 250 total points
ID: 17801143
why not make methods that will set it for you

Public Sub SaveFileDialog_XMLProperty(ByRef sfd as SaveFileDialog)
  With sfd
    .Filter = "XML Files (*.xml)|*.xml"
    .DefaultExt = "XML"
    .InitialDirectory = "c:\"
  End With
End Sub

and call that from wherever you need:
SaveFileDialog_XMLProperty(SaveFileDialog1)
0
 
LVL 85

Assisted Solution

by:Mike Tomlinson
Mike Tomlinson earned 250 total points
ID: 17801182
Here is a more generic approach using a HashTable to store key/value pairs and the CallByName() function:

(Reflection could also be used here...)

    Private presets As New Hashtable

    Private Sub TestForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        presets.Add("Filter", "XML Files (*.xml)|*.xml")
        presets.Add("DefaultExt", "XML")
        presets.Add("InitialDirectory", "c:\")
    End Sub

    Public Sub SetProperties(ByVal obj As Object, ByVal values As Hashtable)
        For Each de As DictionaryEntry In values
            Try
                CallByName(obj, de.Key, CallType.Let, de.Value)
            Catch ex As Exception
            End Try
        Next
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim SaveFileDialog1 As New SaveFileDialog
        Dim OpenFileDialog1 As New OpenFileDialog
        SetProperties(SaveFileDialog1, presets)
        SetProperties(OpenFileDialog1, presets)
    End Sub
0
 
LVL 13

Author Comment

by:Corey2
ID: 17816180
Idle_Mind do you have any examples for using reflection in this manner?  The examples here are likely simpler but I would like to know incase it fits this or another situation better.  Thanks.
0
 
LVL 85

Assisted Solution

by:Mike Tomlinson
Mike Tomlinson earned 250 total points
ID: 17824601
Sure...

    Public Sub SetProperties(ByVal obj As Object, ByVal values As Hashtable)
        Dim T As Type = obj.GetType
        Dim P As System.Reflection.PropertyInfo
        For Each de As DictionaryEntry In values
            Try
                P = T.GetProperty(de.Key)
                P.SetValue(obj, de.Value, Nothing)
            Catch ex As Exception
            End Try
        Next
    End Sub
0

Featured Post

Live: Real-Time Solutions, Start Here

Receive instant 1:1 support from technology experts, using our real-time conversation and whiteboard interface. Your first 5 minutes are always free.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

If you're writing a .NET application to connect to an Access .mdb database and use pre-existing queries that require parameters, you've come to the right place! Let's say the pre-existing query(qryCust) in Access takes a Date as a parameter and l…
The ECB site provides FX rates for major currencies since its inception in 1999 in the form of an XML feed. The files have the following format (reducted for brevity) (CODE) There are three files available HERE (http://www.ecb.europa.eu/stats/exch…
Email security requires an ever evolving service that stays up to date with counter-evolving threats. The Email Laundry perform Research and Development to ensure their email security service evolves faster than cyber criminals. We apply our Threat…
A short tutorial showing how to set up an email signature in Outlook on the Web (previously known as OWA). For free email signatures designs, visit https://www.mail-signatures.com/articles/signature-templates/?sts=6651 If you want to manage em…

776 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question