473,388 Members | 1,172 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,388 software developers and data experts.

Check if a Public Method exists for a form and execute it

I need a way to do the following and cannot seem to find a solution via
google.

1. Have a method from the main app to get all open forms
2. Check each open form for a public method
3. If this public method exists execute it which will result in the
displayed form being updated. There will be no data loss as the forms
will only contain listviews or readonly fields.

Regards
Jeff
Jun 27 '08 #1
7 1921
On Fri, 09 May 2008 20:59:27 -0700, Jeff <jeff@[_nospam_].hardsoft.com.au>
wrote:
I need a way to do the following and cannot seem to find a solution via
google.

1. Have a method from the main app to get all open forms
2. Check each open form for a public method
3. If this public method exists execute it which will result in the
displayed form being updated. There will be no data loss as the forms
will only contain listviews or readonly fields.
I don't really understand the last statement, as neither the question of
ListView instances or of readonly fields affects whether there could
potentially be data loss.

However, to address your specific question, you are looking for the
Reflection namespace. You can use GetType() on each form instance to get
its actual type, and then use that Type instance to look for particular
members, including a method to invoke.

That said, using Reflection should be a last resort. As an example here,
it would be much better if each form that might need this method to be
called instead implemented the method as an event handler. Then the
application would define an event each form could subscribe to. When the
event was raised, each form would then have its method executed
automatically, without having to go through all the reflection rigamarole.

If for some reason that and any other potential alternative isn't
possible, then reflection is your answer.

Pete
Jun 27 '08 #2
Thanks Peter

Something new for me to learn and try.

This opens up something I did not know you could do and it seams that
events can be across applications and one application can fire an even
in another if they are both subscribed.

Now to find a good article and sample code.

Jeff

Peter Duniho wrote:
On Fri, 09 May 2008 20:59:27 -0700, Jeff
<jeff@[_nospam_].hardsoft.com.auwrote:
>I need a way to do the following and cannot seem to find a solution
via google.

1. Have a method from the main app to get all open forms
2. Check each open form for a public method
3. If this public method exists execute it which will result in the
displayed form being updated. There will be no data loss as the forms
will only contain listviews or readonly fields.

I don't really understand the last statement, as neither the question of
ListView instances or of readonly fields affects whether there could
potentially be data loss.

However, to address your specific question, you are looking for the
Reflection namespace. You can use GetType() on each form instance to
get its actual type, and then use that Type instance to look for
particular members, including a method to invoke.

That said, using Reflection should be a last resort. As an example
here, it would be much better if each form that might need this method
to be called instead implemented the method as an event handler. Then
the application would define an event each form could subscribe to.
When the event was raised, each form would then have its method executed
automatically, without having to go through all the reflection rigamarole.

If for some reason that and any other potential alternative isn't
possible, then reflection is your answer.

Pete
Jun 27 '08 #3
On Fri, 09 May 2008 23:10:40 -0700, Jeff <jeff@[_nospam_].hardsoft.com.au>
wrote:
This opens up something I did not know you could do and it seams that
events can be across applications and one application can fire an even
in another if they are both subscribed.
Well, when I wrote "event" I was speaking of the .NET/C# variety of
events. The unmanaged Windows API also has the concept of "events", but
they aren't subscription based, and while named events can be
cross-application (i.e. cross-process), they are only useful for
communicating a toggle state.

There was nothing in your original question that suggested you needed a
cross-process solution. If you do, then neither reflection nor a C# event
will help.

If you don't need a cross-process solution, then you may want to start
here:
http://msdn.microsoft.com/en-us/library/8627sbea.aspx [event (C#
Reference)]

Be sure to visit this page too:
http://msdn.microsoft.com/en-us/library/awbftdfh.aspx [Events (C#
Programming Guide)]

It contains lots of links to additional useful articles on the topic.

Pete
Jun 27 '08 #4
Maybe I'm misunderstanding you, but it sounds like using an interface would
be the easiest solution. Require all your forms to implement an interface
with that method defined; then you can loop through all the forms and call
that method on each.

"Jeff" <jeff@[_nospam_].hardsoft.com.auwrote in message
news:tN******************************@posted.inter node...
>I need a way to do the following and cannot seem to find a solution via
google.

1. Have a method from the main app to get all open forms
2. Check each open form for a public method
3. If this public method exists execute it which will result in the
displayed form being updated. There will be no data loss as the forms
will only contain listviews or readonly fields.

Regards
Jeff
Jun 27 '08 #5
1. Application.OpenForms will give you all the open forms.
2. Checking for a method could use reflection, but if this is code
internally developed by you, you should be able to cast to the appropriate
form type and know that the method exists.
3. (i wouldn't separate 2 and 3.)

"Jeff" wrote:
I need a way to do the following and cannot seem to find a solution via
google.

1. Have a method from the main app to get all open forms
2. Check each open form for a public method
3. If this public method exists execute it which will result in the
displayed form being updated. There will be no data loss as the forms
will only contain listviews or readonly fields.

Regards
Jeff
Jun 27 '08 #6
On Sat, 10 May 2008 10:16:18 -0700, Nathan
<ms********@macgregorfamily.netwrote:
Maybe I'm misunderstanding you, but it sounds like using an interface
would be the easiest solution. Require all your forms to implement an
interface with that method defined; then you can loop through all the
forms and call that method on each.
This is a fine approach as far as it goes. It's certainly a lot closer to
what the OP specifically asked for, and assuming he has the ability to
modify the form classes, is much better than using reflection.

That said, it's a bit "Java-like", especially with respect to defining an
interface with only one method just so you can call that one method. Not
that there's anything technially wrong with being "Java-like" :). Just
that in .NET, with delegates and events, it's more common to approach this
sort of problem using events.

Even .NET has a handful of interfaces that have just one method. It's not
that it's necessarily bad design to do so. But for me, interfaces are
more about abstraction than about conditional processing. With the "is"
or "as" operator, an interface implementation would definitely work fine,
but if one is going to have to change the original class anyway, an event
is IMHO more in line with the usual .NET paradigms than defining an
interface that has only one method. It also avoids the need to enumerate
all of the open forms, instead taking advantage of the multicast nature of
an event to directly retrieve the group of form instances that is exactly
those that will response to the specific operation.

That said, I think that which is preferable may really come down to what
this operation actually is. Since we don't have that detail, only the OP
can determine the answer to that. If it's a case of an operation that is
best thought of as "these forms implement a certain kind of behavior that
needs to be used at some point in time", then I think the interface
approach lends itself very nicely to that. On the other hand, if it's a
case of an operation that is best thought of as "this particular thing
happens at a particular point in time and these forms need to be informed
about that", then an event is probably paradigmatically more appropriate.

Pete
Jun 27 '08 #7
Jeff wrote:
I need a way to do the following and cannot seem to find a solution via
google.

1. Have a method from the main app to get all open forms
2. Check each open form for a public method
3. If this public method exists execute it which will result in the
displayed form being updated. There will be no data loss as the forms
will only contain listviews or readonly fields.
This last part is interesting. Are all these forms using a common data source?
If not, could they be?

It reads like you've got the same data in several places, and it would make more
sense to have a datasource that itself gets updated, and then the forms can
handle dealing with the updated datasource on their own.

Chris.
Jun 27 '08 #8

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

2
by: Jonathan | last post by:
I am looking for a simple way to check if a database table exists. I keep getting advice to use "Try.. Catch" and other error handling methods, but I obviously don't want to have to display an...
2
by: Mike | last post by:
Ive got a number of SPAN elements named "mySpan1", "mySpan2", "mySpan3" etc, and want to set their "style.display" to "inline". This works (only needs to work on IE5.5+): for (var x = 1; x <...
3
by: Caspy | last post by:
I just get stuck on how to check if a user is a member of network (domain). I am building an internal tracking system with ASP.Net with Form authentication. When an user is added into the system,...
1
by: sianan | last post by:
I tried to use the following example, to add a checkbox column to a DataGrid in an ASP.NET application: http://www.codeproject.com/aspnet/datagridcheckbox.asp For some reason, I simply CAN'T get...
1
by: aaa | last post by:
What is the most efficient way to do a check to see if a webservice exists before attempting to execute. I was thinking of just creating an HTTP object then initiating a request to see if i get a...
5
by: rn5a | last post by:
The .NET 2.0 documentation states the following: When using a DataSet or DataTable in conjunction with a DataAdapter & a relational data source, use the Delete method of the DataRow to remove...
16
by: king kikapu | last post by:
Hi to all, in statically-types languages, let's say C# for example, we use polymorphism through interfaces. So we define an interface I with method M and then a class C that implements I...
82
by: happyse27 | last post by:
Hi All, I modified the user registration script, but not sure how to make it check for each variable in terms of preventing junk registration and invalid characters? Two codes below : a)...
2
by: qwedster | last post by:
Folk! How to programattically check if null value exists in database table (using stored procedure)? I know it's possble in the Query Analyzer (see last SQL query batch statements)? But how...
0
by: taylorcarr | last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.