?
Solved

Re-Usable Property values?

Posted on 2006-10-24
5
Medium Priority
?
160 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
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 1000 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 86

Assisted Solution

by:Mike Tomlinson
Mike Tomlinson earned 1000 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 86

Assisted Solution

by:Mike Tomlinson
Mike Tomlinson earned 1000 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

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

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…
A while ago, I was working on a Windows Forms application and I needed a special label control with reflection (glass) effect to show some titles in a stylish way. I've always enjoyed working with graphics, but it's never too clever to re-invent …
In this video we outline the Physical Segments view of NetCrunch network monitor. By following this brief how-to video, you will be able to learn how NetCrunch visualizes your network, how granular is the information collected, as well as where to f…
Michael from AdRem Software outlines event notifications and Automatic Corrective Actions in network monitoring. Automatic Corrective Actions are scripts, which can automatically run upon discovery of a certain undesirable condition in your network.…
Suggested Courses
Course of the Month9 days, 12 hours left to enroll

762 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