C# WinForms在窗体之间传递数据
我有一个名为C# WinForms在窗体之间传递数据,c#,winforms,toolstripmenu,C#,Winforms,Toolstripmenu,我有一个名为questions的表,其中有一个字段名qcategory。在WFA中,我有一个ToolStripMenu,其中有一个名为Simulation的类别和一个名为B的子类别。所以,我想创建一个mysql SELECT,其中只选择值与子类别值相等的行。(表中的列qcategory具有值B)。这是字符串: static string dataA = "SELECT DISTINCT * FROM questions order by rand() limit 1"; 唯一的问题是我有两张表
questions
的表,其中有一个字段名qcategory
。在WFA中,我有一个ToolStripMenu,其中有一个名为Simulation
的类别和一个名为B
的子类别。所以,我想创建一个mysql SELECT,其中只选择值与子类别值相等的行。(表中的列qcategory
具有值B
)。这是字符串:
static string dataA = "SELECT DISTINCT * FROM questions order by rand() limit 1";
唯一的问题是我有两张表格。一个是菜单,另一个是我想选择的地方。您应该尝试拆分UI代码和数据库代码。这被称为分层(MVVM、MVC、MVP等等),但您不必这样做 有几种方法: 1) 创建一个类,使两个表单都可以引用并执行数据库逻辑。(这将是目前最干净的方式) 2) 使用菜单在表单中创建事件,并在另一个表单中对其作出反应 3) 菜单窗体保存对另一个窗体的引用,并在其上执行传递选定子项的方法 编码 一, 二, 对于示例,表单2是要执行查询的表单,因为定义了将与数据库交互的方法/事件处理程序 要理解解决方案,您需要一个更高层次的视角—您可以从表单(类)的代码隐藏中获取信息,并且希望在其他地方使用该信息。
通常,您需要对保存您感兴趣的信息的表单进行引用,并在更改(事件)或
信息源告诉每个感兴趣的目的地(调用一个方法)。然后信息源保存对消费者的引用。
这两个概念是相同的,只是通信(和参考)的方向发生了变化
另一种选择(选项1)是将信息目的地移动到其他地方(例如,在静态类中)并在那里使用。传递信息的机制基本相同(通过参数化方法调用),但它封装了数据库代码(SQL查询执行)中的UI COLD(表单)要将字符串从带有菜单的表单传递到另一个表单吗?完全正确!你能告诉我吗?嗯……我真的不明白你的建议……你能用我的cod给我举个例子吗?表单where is菜单名为
Student
,表单where is query名为Sim
。在你的解释中,我不明白在我的问题中谁是Form1和Form2。当然,他不能用你的代码给出一个例子。您自己没有显示任何代码。我设法修复了它。谢谢:)Philip,没有这方面的代码,因为对于菜单,我和用户Dev Express只需要写3-4行。但这很好:)
public static class SqlClass
{
public static void ExecuteQuery(string menuItem)
{
//execute query
}
}
Form 1
//menu changed...
SqlClass.ExecuteQuery(menuItem)
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
}
private readonly Form2 _otherForm;
public Form1(Form2 otherForm)
{
InitializeComponent();
_otherForm = otherForm;
}
//menu changed...
otherForm.ExecuteQuery(menuitem);