您应该尝试拆分 UI 代码和数据库代码。这称为分层(MVVM、MVC、MVP,...),但您不必这样做!
有几种方法:
1) 创建一个类,两个表单都可以引用并在那里执行您的数据库逻辑。 (这将是目前最干净的方式)
2) 使用菜单在您的表单中创建一个事件并在另一个表单中对其做出反应
3) 您的菜单表单包含对另一个表单的引用,并在其上执行一个方法,传递选定的子项。
在代码中
1
public static class SqlClass
{
public static void ExecuteQuery(string menuItem)
{
//execute query
}
}
Form 1
//menu changed...
SqlClass.ExecuteQuery(menuItem)
2
Form1:
public event EventHandler<string> MenuItemChanged;
//menu changed...
if(this.MenuItemChanged != null)
this.MenuItemChanged(this, menuitem)
Form2:
public Form2(Form1 otherForm)
{
InitializeComponent();
_otherForm.MenuItemChange += //... handle your sql code
}
3
private readonly Form2 _otherForm;
public Form1(Form2 otherForm)
{
InitializeComponent();
_otherForm = otherForm;
}
//menu changed...
otherForm.ExecuteQuery(menuitem);
对于示例,表单 2 是您要执行查询的表单,因为定义了将与您的数据库交互的方法/事件处理程序。
要理解解决方案,您需要更高层次的视角 - 您在表单(类)后面的代码中获取信息,并且您希望在其他地方使用该信息。
一般来说,您需要参考包含您感兴趣的信息的表格,它会在更改时告诉您信息(事件)或
信息源告诉每个感兴趣的目的地(调用方法)。然后信息源保存对消费者的引用。
这两个概念都是一样的,只是交流(和参考)的方向发生了变化。
另一种选择(选项 1)是将信息目的地移动到其他地方(例如,在静态类中)并在那里使用它。传递信息的机制几乎相同(通过参数化方法调用),但它封装了数据库代码中的 UI-colde(表单)(SQL 查询执行)