Convert a string to a method call

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,
ukalyanAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
Tony McCreathConnect With a Mentor Technical SEO ConsultantCommented:
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
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.