How do I pass an event handler as a method parameter?
c#, delegates, methods, parameters
Solution
You can't cast your mouse button event args handler to a plain EventHandler - try an `EventHandler<MouseButtonEventArgs>` in the constructor instead.
Problem
How can I pass the event handler TextBlock_MouseDown_Test1 or TextBlock_MouseDown_Test2 to SmartGrid so that the TextBlocks which it creates will execute this event handler when they are clicked? The code below gets the error: The best overloaded method match for 'TestDel234.SmartGrid.SmartGrid(TestDel234.Window1, System.Collections.Generic.List, System.EventHandler)' has some invalid arguments ``` using System; using System.Collections.Generic; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; namespace TestDel234 { public partial class Window1 : Window { public Window1() { InitializeComponent(); List<string> items = new List<string> { "one", "two", "three" }; SmartGrid sg = new SmartGrid(this, items, TextBlock_MouseDown_Test1); } private void TextBlock_MouseDown_Test1(object sender, MouseButtonEventArgs e) { MessageBox.Show("testing1"); } private void TextBlock_MouseDown_Test2(object sender, MouseButtonEventArgs e) { MessageBox.Show("testing2"); } } public class SmartGrid { public SmartGrid(Window1 window, List<string> items, EventHandler eventHandler) { foreach (var item in items) { TextBlock tb = new TextBlock(); tb.Text = item; tb.MouseDown += new MouseButtonEventHandler(eventHandler); window.MainContent.Children.Add(tb); } } } } ```