在运行时创建控件的OOP方法?

时间:2018-10-11 06:23:33

标签: c#

我是C#和OOP的新手,但仍在努力将其包围住。 看了很多教程,我确实了解了一些,其他的却不是很多...

无论如何,我试图给自己解决问题,然后解决它们。

这是问题所在。

我知道如何在运行时对WPF创建一些控件:

private void addButton()
    {

        for (int i = 0; i < 10; i++)
        {

        var btnX = new Button { Content = "btn" + i };

        btnX.Click += ClickHandler1;

        stPanel.Children.Add(btnX);
        }
    }

但是,现在,我希望此方法存在于单独的类中,该类可以从另一个类调用,传递一些参数,然后在传递参数的类中创建按钮。

现在在我的Programs.cs中,我有:

  private void addButtonX()
    {

        for (int i = 0; i < 10; i++)
        {

            CreateGroupButtons btn = new CreateGroupButtons();
            stPanel.Children.Add(btn.addButton(i));
        }
    }

我上课了

 class CreateGroupButtons
{

    public Button addButton(int num)
    {
         var btnX = new Button { Content = "btn" + num };

                   return btnX; 

    }
}

创建了按钮,但是现在仅存在一个问题,我不确定如何解决该问题:

如何添加Handler事件?

btnX.Click + = ClickHandler1;

谢谢!

1 个答案:

答案 0 :(得分:2)

我假设您正在使用System.Windows.Controls.Button类?如果是这样,则ButtonBaseButton派生的基类,它定义了一个名为Click的event。要添加事件处理程序,您只需订阅此event

btnX.Click += (sender, args) => { /* Your code here */ }

更新

如果您希望addButton方法订阅该方法之外的方法,则可以发送Action,该方法可以在event handler内触发

public Button AddButton(int num, Action actionToPerform)
{
    var btnX = new Button { Content = "btn" + num };
    btnX.Click += (sender, args) => { actionToPerform(); }
    return btnX; 
}

然后从外部

var btns = new CreateGroupButtons()
btns.AddButton(1, () => { MessageBox.Show("Hello, World"); }; );