全局函数存储库
本文关键字:存储 函数 全局 | 更新日期: 2023-09-27 18:13:49
我有几个Control
,如ToolStripMenuItem
和Button
,需要有一个函数绑定到他们的点击事件。它们要么生成一个新的Form
,要么在当前的TabControl
上添加一个TabPage
。我可能最终会有几个不同的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
的实例并初始化函数列表。
我不知道这是不是一个好主意,所以我希望你能给我一些建议。
您使用的是什么编程环境?我知道在Visual Studio中,如果你有几个使用相同方法的控件你可以在其中一个click事件下创建这个方法然后,对于每个需要相同方法的控件,你可以绑定那个方法通过让控件绑定到你添加那个方法的第一个控件的click事件。至于创建包含每个必要函数的存储库,我总是很幸运地只创建单个单击事件,我建议只创建一个类来保存这些函数,并将其设置为静态。因为Services需要先实例化其他东西,所以只需实例化TabControl,然后再实例化包含方法的静态类。
您可以使用公共实例方法创建类似TabController
和PopupController
的东西,分别用于创建选项卡和表单。TabController
可能依赖于TabControl
, PopupContorller
依赖于父表单(如果需要的话)。每个Control
都有自己的事件处理程序,其中TabController
和PopupController
的方法将被调用。
乌利希期刊指南:
由于Controls
是动态创建的,因此使用一种通用的工具来连接事件处理程序可能是一个好主意。但是,连接逻辑应该与事件处理程序实现逻辑分离,以使其更具可读性和可维护性。例如,IntelligentEventHandlerWiringManager
可以有TabController
和PopupController
的依赖项。