全局功能库

comnis 发布于 4 天前 c# 最后更新 4 天前 3 浏览

我有几个Control,比如ToolStripMenuItemButton,它们需要有一个绑定到它们的点击事件的函数。他们将生成一个新的Form或将一个TabPage添加到当前的TabControl。我可能会得到几个不同的Control,它们需要相同的功能,所以我想到了创建一个全局函数库。 我将有一个名为Services的类,如下所示:

public class Services {
    TabControl container;
    delegate void fonction(int id);
    Dictionary<string, fonction> functions = new Dictionary<string, fonction>();
public Services(TabControl control) {
        container = control;
        InitFunctions();
    }
public Delegate Getfunction(string name) {
        if (functions.ContainsKey(name))
            return functions[name];
        else 
            throw new NotImplementedException("Failed to instantiate " + name );
    }
// List of all the desired functions
    // Function example
    private void ProductLoan(int id) {
        string name = "Loan"+id.ToString();
        Form newForm = new Loan();
        newForm.Text = Properties.Resources.MakeLoan;
        newForm.ShowDialog();
    }
    private void InitFunctions() {
        fonction f = new fonction(ProductLoan);
        functions.Add("Loan", f);
        // For each functions
        // f = new fonction(name);
        // functions.Add(name, f);
    }
}
当程序启动并全局存储时,该类将被实例化,以便可以随处访问。如果我错误地继续这样做,请纠正我,但是我没有将Services类设置为静态,因为它需要具有TabControl的实例并初始化函数列表。 如果这是一个好主意,我不知道,所以我会很感激一些建议。
已邀请:

prem

赞同来自:

您使用的编程环境是什么?我知道在Visual Studio中,如果你有几个使用相同方法的控件,你可以在其中一个click事件下创建该方法,然后,对于每个需要相同方法的控件,你可以通过让控件实际绑定来绑定该方法到您添加该方法的第一个控件的click事件。至于创建一个包含必要的每个函数的存储库,我总是有更好的运气来制作单独的点击事件,我建议只是创建一个类来保存函数并使其保持静态。因为Services需要首先实例化其他东西,只需实例化TabControl然后保存你的方法的静态类。

grem

赞同来自:

您可以使用公共实例方法创建类似TabControllerPopupController的内容,分别用于创建选项卡和表单。 TabController可能依赖于TabControl,而PopupContorller将依赖于父窗体(如果需要)。每个Control都有自己的事件处理程序,其中将调用TabControllerPopupController中的方法。 UPD: 由于Controls是动态创建的,因此用于连接事件处理程序的通用工具可能是个好主意。但是布线逻辑应该与事件处理程序实现逻辑分离,以使其更具可读性和可维护性。例如,IntelligentEventHandlerWiringManager可能具有TabControllerPopupController的依赖关系。