﻿<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>StrataFrame Forum » StrataFrame Application Framework - V1 » WinForms (How do I?)  » How to pass a method as a parameter</title><generator>InstantForum 2017-1 Final</generator><description>StrataFrame Forum</description><link>http://forum.strataframe.net/</link><webMaster>StrataFrame Forum</webMaster><lastBuildDate>Sat, 04 Jul 2026 07:23:57 GMT</lastBuildDate><ttl>20</ttl><item><title>How to pass a method as a parameter</title><link>http://forum.strataframe.net/FindPost30263.aspx</link><description>I want to set up a General Purpose type method which will have two parameters, a Business Object, and a Method Name of the business object. The method then needs to just run the method. &lt;br/&gt;&lt;br/&gt;e.g. &lt;br/&gt;&lt;br/&gt;[quote]private void RunABoMethod(BusinessObject myBo, Methodname MyMethodname))&lt;br/&gt;{&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myBO.MyMethodname;&lt;br/&gt;}&lt;br/&gt;so some examples of how this might be called:&lt;br/&gt;RunABoMethod(CustomerBO,"GetAllrecords");&lt;br/&gt;or&lt;br/&gt;RunABomethod(StockBO,"GetTop20");[/quote]&lt;br/&gt;&lt;br/&gt;Any suggestions / coding examples on how this might be accomplished (c#) would be appreciated. A few searches indicate that Func (Dot Net 3.5) or delgates could be used but I have no experience of using these constructs</description><pubDate>Sun, 04 Sep 2011 05:25:49 GMT</pubDate><dc:creator>Ger Cannoll</dc:creator></item><item><title>RE: How to pass a method as a parameter</title><link>http://forum.strataframe.net/FindPost30301.aspx</link><description>Hi Keith . Thats exactly waht I want to do.&lt;br/&gt;&lt;br/&gt;Unfortunately, CallByName seems to be a VB thing.. not supported in C#, but reflection and INVOKE seems to do it in C#</description><pubDate>Sun, 04 Sep 2011 05:25:49 GMT</pubDate><dc:creator>Ger Cannoll</dc:creator></item><item><title>RE: How to pass a method as a parameter</title><link>http://forum.strataframe.net/FindPost30291.aspx</link><description>Hi Keith,&lt;br/&gt;Thanks for the information, very interesting function.</description><pubDate>Tue, 30 Aug 2011 22:37:48 GMT</pubDate><dc:creator>Edhy Rijo</dc:creator></item><item><title>RE: How to pass a method as a parameter</title><link>http://forum.strataframe.net/FindPost30290.aspx</link><description>You may want CallByName(). I have found it useful in doing something similar to what you describe. I have a project where just about everything is data driven, I use CallByName to execute methods whos names are stored in a table, as they are assigned by the user from a set of selections, very much like a query builder, so the value of the field "StuffToDoToSomeString" might be "TrimIt()" or "SplitCamelCase()", or ... you get the idea. Hope this might help you.&lt;br/&gt;&lt;br/&gt;h&lt;a href="http://msdn.microsoft.com/en-us/library/chsc1tx6(v=vs.80).aspx"&gt;ttp://msdn.microsoft.com/en-us/library/chsc1tx6(v=vs.80).aspx&lt;/a&gt;</description><pubDate>Tue, 30 Aug 2011 20:49:14 GMT</pubDate><dc:creator>Keith Chisarik</dc:creator></item><item><title>RE: How to pass a method as a parameter</title><link>http://forum.strataframe.net/FindPost30281.aspx</link><description>Hi Edhy.&lt;br/&gt;&lt;br/&gt;Yes, I was trying to make this fairly Generic, though I see your &amp;nbsp;point about using an enumeration as a possible way to go.&lt;br/&gt;&lt;br/&gt;I think this can be done using Delegates and/or functions , just have no experience of using them... perhaps someone familiar with these might jump in.</description><pubDate>Tue, 30 Aug 2011 10:48:06 GMT</pubDate><dc:creator>Ger Cannoll</dc:creator></item><item><title>RE: How to pass a method as a parameter</title><link>http://forum.strataframe.net/FindPost30278.aspx</link><description>Hi Gerard,&lt;br/&gt;&lt;br/&gt;I see what you meant now.&amp;nbsp; I have not done that, but my guess is that you would have to use the Reflection class or something like lazy binding,&amp;nbsp; to sort of been able to execute the method in the passed BO.&amp;nbsp; Also you must CAST your bo to the proper type to be able to find your method name, this could get ugly.&lt;br/&gt;&lt;br/&gt;Probably looking at your logic from a different side you can achieve this easier.&amp;nbsp; Using your sample, you will always know at some point which BO and Method you want to run, so unless this must be totally generic and data driven, you can simply have an Enumeration listing the pre-existing methods and just use the old Select Case MyEnumeration and just pre-code your BO method calling.&amp;nbsp; &lt;br/&gt;Again, this may not be generic enough for your needs, but could be faster, easier and safe. &lt;span&gt;:doze:&lt;/span&gt;</description><pubDate>Tue, 30 Aug 2011 09:24:15 GMT</pubDate><dc:creator>Edhy Rijo</dc:creator></item><item><title>RE: How to pass a method as a parameter</title><link>http://forum.strataframe.net/FindPost30276.aspx</link><description>Hi Edhy , thanks for your reply.&lt;br/&gt;&lt;br/&gt;I have implemented your suggestion and changed my code around a bit, and it works fine, as long as method name is the same, and I am over-riding a spefic method.&lt;br/&gt;&lt;br/&gt;What I was trying to get at , was a way of running a method, but the method name may be different, really a way of passing a method name as a parameter, and then running the 'passed' method.&amp;nbsp; Each BO could&amp;nbsp; have a different method name and I am trying to pass the Bo and method name to a general purpos type routine. &lt;br/&gt;&lt;br/&gt;Say for instance I have a Cutomers BO with a method called CalculateCustomers and a Stock BO with a Method called CalculateStock. I then want to pass a BO and a method name to a Routine which will execute the Method I have called on the Bo I have called.&lt;br/&gt;&lt;br/&gt;So I might RunMyMethod(CustomerBO,"CalculateCustomers")&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; or&amp;nbsp;&amp;nbsp; RunMyMethod(StockBO,"CalculateStock") and Pseudo code for RunMyMethod would be:&lt;br/&gt;&lt;br/&gt;[quote]RunMyMethod(MicroFour.StrataFrame.Business.BusinessLayer MyBo, string MyMethodName)&lt;br/&gt;{ BO.MyMethodName() }[/quote]&lt;br/&gt;&lt;br/&gt;&lt;font color=#008000 size=2 face=Consolas&gt;The end result of this is to run the CalclateCustomers method in the CustomersBO&amp;nbsp; or run the CalculateStock in the StockBO etc&lt;/font&gt;</description><pubDate>Tue, 30 Aug 2011 09:00:30 GMT</pubDate><dc:creator>Ger Cannoll</dc:creator></item><item><title>RE: How to pass a method as a parameter</title><link>http://forum.strataframe.net/FindPost30264.aspx</link><description>Hi Gerard,&lt;br/&gt;&lt;br/&gt;Based on your sample, it looks like you want to have a set of methods to be able to use them from any BO.&amp;nbsp; If that is the case, then it is pretty simple:&lt;br/&gt;&lt;ol&gt;&lt;li&gt;Create a BO base class and inherit it from MicroFour.StrataFrame.Businesss.BusinessLayer&lt;br/&gt;&lt;/li&gt;&lt;li&gt;Add any public methods you want to be available to all BOs.&lt;/li&gt;&lt;li&gt;Inherit the base BO in any new BO and use your methods.&lt;/li&gt;&lt;/ol&gt;Here is a sample code I have on my Base BO.&amp;nbsp; I use VB.&lt;br/&gt;&lt;span&gt;&lt;span&gt;[code]&lt;/span&gt;&lt;/span&gt;&lt;pre style="font-family:Consolas;font-size:13;color:black;background:white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:green;"&gt;'''&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;'''&amp;nbsp;This&amp;nbsp;method&amp;nbsp;will&amp;nbsp;return&amp;nbsp;all&amp;nbsp;records&amp;nbsp;from&amp;nbsp;this&amp;nbsp;BO&amp;nbsp;TableName.&lt;/span&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;'''&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;'''&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;remarks&amp;gt;&amp;lt;/remarks&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;Public&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;Overridable&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;Sub&lt;/span&gt;&amp;nbsp;FillAllRecords()&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;Using&lt;/span&gt;&amp;nbsp;cmd&amp;nbsp;&lt;span style="color:blue;"&gt;As&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;New&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;SqlCommand&lt;/span&gt;()&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd.CommandType&amp;nbsp;=&amp;nbsp;&lt;span style="color:#2b91af;"&gt;CommandType&lt;/span&gt;.Text&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd.CommandText&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue;"&gt;String&lt;/span&gt;.Format(&lt;span style="color:#a31515;"&gt;"Select&amp;nbsp;*&amp;nbsp;From&amp;nbsp;{0}"&lt;/span&gt;,&amp;nbsp;&lt;span style="color:blue;"&gt;Me&lt;/span&gt;.TableNameAndSchema)&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;'--&amp;nbsp;Set&amp;nbsp;the&amp;nbsp;ORDER&amp;nbsp;BY&amp;nbsp;clause&amp;nbsp;if&amp;nbsp;filled.&lt;/span&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;If&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;Not&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;String&lt;/span&gt;.IsNullOrEmpty(&lt;span style="color:blue;"&gt;Me&lt;/span&gt;.SortColumnFieldList)&amp;nbsp;&lt;span style="color:blue;"&gt;Then&lt;/span&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd.CommandText&amp;nbsp;+=&amp;nbsp;&lt;span style="color:#a31515;"&gt;"&amp;nbsp;ORDER&amp;nbsp;BY&amp;nbsp;"&lt;/span&gt;&amp;nbsp;&amp;amp;&amp;nbsp;&lt;span style="color:blue;"&gt;Me&lt;/span&gt;._SortColumnFieldList&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;End&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;If&lt;/span&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;Me&lt;/span&gt;.FillDataTable(cmd)&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;End&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;Using&lt;/span&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;End&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;Sub&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;br/&gt;[/code]&lt;/span&gt;&lt;/span&gt;&lt;br/&gt;&lt;/pre&gt;Now when I create a new BO I inherit the base BO class, will have access to the FillAllRecords() method, and since it is "Overridable", I can even overrite it at any subclass level.&lt;br/&gt;&lt;span&gt;[code]&lt;br/&gt;&lt;/span&gt;&lt;pre style="font-family:Consolas;font-size:13;color:black;background:white;"&gt;&lt;span style="color:blue;"&gt;Public&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;Class&lt;/span&gt;&amp;nbsp;&lt;span style="color:#2b91af;"&gt;bizItems&lt;br/&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;Inherits&lt;/span&gt;&amp;nbsp;CardTrackingSystem.Business.&lt;span style="color:#2b91af;"&gt;ApplicationBaseBusinessClass&lt;/span&gt;&lt;br/&gt;     ... more code here....&lt;br/&gt;&lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;span style="color:blue;"&gt;Class&lt;/span&gt; &lt;br/&gt;&lt;/pre&gt;&lt;span&gt;[/code]&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;Hope this help!</description><pubDate>Tue, 23 Aug 2011 12:11:44 GMT</pubDate><dc:creator>Edhy Rijo</dc:creator></item></channel></rss>