Solved

Re-Usable Property values?

Posted on 2006-10-24
5
157 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 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

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Question has a verified solution.

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

Article by: jpaulino
XML Literals are a great way to handle XML files and the community doesn’t use it as much as it should.  An XML Literal is like a String (http://msdn.microsoft.com/en-us/library/system.string.aspx) Literal, only instead of starting and ending with w…
Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
How to Install VMware Tools in Red Hat Enterprise Linux 6.4 (RHEL 6.4) Step-by-Step Tutorial
Are you ready to implement Active Directory best practices without reading 300+ pages? You're in luck. In this webinar hosted by Skyport Systems, you gain insight into Microsoft's latest comprehensive guide, with tips on the best and easiest way…

756 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