0

我有几个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类设为静态,因为它需要有一个TabControland 的实例来初始化函数列表。

我不知道这是否是个好主意,所以我会很感激一些建议。

4

2 回答 2

1

您可以使用公共实例方法创建类似的东西来分别创建选项卡和TabController表单。PopupControllerTabController可能依赖于TabControl并且PopupContorller将依赖于父表单(如果需要)。每一个Control都会有它自己的事件处理程序,方法来自TabControllerPopupController将被调用。

升级版:

由于Controls它们是动态创建的,因此连接事件处理程序的通用工具可能是一个好主意。但是接线逻辑应该与事件处理程序实现逻辑分开,以使其更具可读性和可维护性。例如IntelligentEventHandlerWiringManager,可能有TabController和的依赖项PopupController

于 2013-05-16T14:44:36.843 回答
1

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

于 2013-05-16T14:36:00.757 回答