繁体   English   中英

C# 调用方法

[英]C# Calling a method

我有一个包含多个用户控件实例的表单。

我已经分配了以下内容:

Switch.armySwitchCloseButton.Click += armySwitchClose;

因此,当按下这些实例之一时,我调用以下方法:

void armySwitchClose(object sender, EventArgs e)

上面的方法有一堆额外的代码,这里不需要。

现在我需要做的是从另一个按钮,从每个实例调用上面的函数。

我怎样才能做到这一点?

非常感谢

在每个用户控件的构造函数中,您可以传递某个知道如何运行此方法的对象的相同实例 void ArmySwitchClose(object sender, EventArgs e)

然后,您在每个事件方法中调用此方法,例如:

Public Class UserControl(){
    private MakeEvent makeEvent;
    Public MyClass(MakeEvent makeEvent)
    {
        this.makeEvent = makeEvent;
        Switch.armySwitchCloseButton.Click += armySwitchClose;
    }

    void armySwitchClose(object sender, EventArgs e)
    {
        makeEvent.armySwitchClose(sender,e);
    }
}

Public Class MakeEvent() {

    void armySwitchClose(object sender, EventArgs e)
    {
        //the real implementation
    }
}

希望这能解决您的问题。


哦,我想我弄错了你的问题......当你点击一个按钮时,其他UC中的所有其他事件都必须被触发,对吧? 这个问题可以用观察者模式解决

Public Interface IObserver
{
    void armySwitchClose(object sender, EventArgs e);
}

Public UserControl1: Observer
{
    void armySwitchClose(object sender, EventArgs e)
    {
        //implementation UC1
    }
}

Public UserControl2: Observer
{
    void armySwitchClose(object sender, EventArgs e)
    {
        //implementation UC2
    }
}

在按钮 UC 中:

Public UserControlButton
{
    private List<IObserver> observers;
    public void addObserver(IObserver observer)
    {
        observers.Add(observer);
    }
    public void button_clickedEvent(object sender, EventArgs e)
    {
        foreach(IObserver observer in observers)
        {
            observer.armySwitchClose(object sender, EventArgs e);
        }
    }
}

在所有按钮的形式中,您调用 addObserver 添加每个用户控件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM