Solved

Convert a string to a method call

Posted on 2009-04-13
2
339 Views
Last Modified: 2013-12-17
I have a form application with a "drop down list" and  "Select button".
There are 3 functions
void foo1()
{
 ...
}

void foo2()
{
...
}
void foo3()
{
...
}

Is it possible to:
1) Convert method names to string so that these strings can be added to "drop down list" as "foo1", "foo2", "foo3"
2) Once a value is selected in the drop down, is it possible to change the selected string to method call:
    i.e. "foo1" as foo1()
          "foo2" as foo2()
         "foo3" as foo3()

My basic understanding of C# says, it is not possible. But I want to find from experts, if there is a way to do this.

Thanks,
0
Comment
Question by:ukalyan
2 Comments
 
LVL 6

Accepted Solution

by:
Cebik earned 250 total points
ID: 24133454
0
 
LVL 23

Assisted Solution

by:Tony McCreath
Tony McCreath earned 250 total points
ID: 24136387
Here's a more structured way to do it using delegates.

Delegates are a way to reference methods and call them later
/// <summary>
/// Define the signature of the methods that can be placed in the combo. e.g.
/// void fooX()
/// </summary>
public delegate void DropDownMethod();
 
/// <summary>
/// A class to be used as items in the combo box
/// </summary>
public class DropDownMethodItem
{
	public DropDownMethodItem(string name, DropDownMethod method)
	{
		Name = name;
		Method = method;
	}
 
	/// <summary>
	/// Display text
	/// </summary>
	public string Name;
 
	/// <summary>
	/// A deligate pointing to the method this item will call
	/// </summary>
	public DropDownMethod Method;
 
	/// <summary>
	/// This controls the display text
	/// </summary>
	/// <returns></returns>
	public override string ToString()
	{
		return Name;
	}
}
 
#region methods to call 
public void foo1()
{
	MessageBox.Show("foo1 called");
}
 
public void foo2()
{
	MessageBox.Show("foo2 called");
}
 
public void foo3()
{
	MessageBox.Show("foo3 called");
}
#endregion
 
/// <summary>
/// Polulates the combo box with each method. In my case I click a button to populate
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonPopulate_Click(object sender, EventArgs e)
{
	comboBox1.Items.Add(new DropDownMethodItem("foo1", new DropDownMethod(foo1)));
	comboBox1.Items.Add(new DropDownMethodItem("foo2", new DropDownMethod(foo2)));
	comboBox1.Items.Add(new DropDownMethodItem("foo3", new DropDownMethod(foo3)));
}
 
/// <summary>
/// Call the selected method when its item is selected
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
	((DropDownMethodItem)comboBox1.SelectedItem).Method();
}

Open in new window

0

Featured Post

How Do You Stack Up Against Your Peers?

With today’s modern enterprise so dependent on digital infrastructures, the impact of major incidents has increased dramatically. Grab the report now to gain insight into how your organization ranks against your peers and learn best-in-class strategies to resolve incidents.

Question has a verified solution.

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

Recently while returning home from work my wife (another .NET developer) was murmuring something. On further poking she said that she has been assigned a task where she has to serialize and deserialize objects and she is afraid of serialization. Wha…
Today I had a very interesting conundrum that had to get solved quickly. Needless to say, it wasn't resolved quickly because when we needed it we were very rushed, but as soon as the conference call was over and I took a step back I saw the correct …
This video shows how to use Hyena, from SystemTools Software, to bulk import 100 user accounts from an external text file. View in 1080p for best video quality.
The Email Laundry PDF encryption service allows companies to send confidential encrypted  emails to anybody. The PDF document can also contain attachments that are embedded in the encrypted PDF. The password is randomly generated by The Email Laundr…

809 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