如何在需要单独的事件处理程序时重用代码

nik*_*mus 0 c#

我有两种几乎相同的方法.唯一的区别是我点击按钮上的click事件有两个单独的事件.有没有一种干净的方法将其转换为一个方法调用?我可以在方法参数列表中传入事件名称吗?如果我实例化两个不同的事件并将它们传递给同一个方法,我需要每个事件都拥有它自己的事件处理方法定义(crowdDynoButtonClick_Event和playerDynoButtonClick_Event)

 private void loadChildCrowdObjectsOnScreen(UniformGrid ug) {
            foreach (PlayerCrowdObjectBO childObject in childCrowdObjectOC) {
                Button b = new Button();
                b.Tag = childObject.ObjectNbr;
                b.Height = 25;
                b.Margin = new Thickness(5);
                b.Content = childObject.ObjectName + "  #" + childObject.ObjectNbr;
                b.Click += crowdDynoButtonClick_Event;
                ug.Children.Add(b);
            }
        }

 private void loadChildPlayerObjectsOnScreen(UniformGrid ug) {
            foreach (PlayerCrowdObjectBO childObject in childPlayerObjectOC) {
                Button b = new Button();
                b.Tag = childObject.ObjectNbr;
                b.Height = 25;
                b.Margin = new Thickness(5);
                b.Content = childObject.ObjectName + "  #" + childObject.ObjectNbr;
                b.Click += playerDynoButtonClick_Event;
                ug.Children.Add(b);
            }
        }
Run Code Online (Sandbox Code Playgroud)

Art*_*out 6

你可以去提取事件处理程序

private void loadCrowdObjectsOnScreen(UniformGrid ug, RoutedEventHandler handler) {
    foreach (PlayerCrowdObjectBO childObject in childCrowdObjectOC) {
       Button b = new Button();
       b.Tag = childObject.ObjectNbr;
       b.Height = 25;
       b.Margin = new Thickness(5);
       b.Content = childObject.ObjectName + "  #" + childObject.ObjectNbr;
       b.Click += handler;
       ug.Children.Add(b);
    }
 }
Run Code Online (Sandbox Code Playgroud)

注意:我不确定您的handler类型是什么,您可能需要对其进行增强以应用于您的代码.