【发布时间】:2012-07-01 23:09:31
【问题描述】:
假设我有 2 个按钮,它们应该在不同的对象上执行相同的操作。
目前我将所有需要的引用传递给这样的方法:
private void sub1_add_to_db_btn_Click(object sender, EventArgs e)
{
Add_Substance_To_Database(
substanse1, sub1_add_to_db_btn, sub2_add_to_db_btn, sub1_found_in_db_list,
sub2_found_in_db_list, false, sub1_listBox, sub2_listBox);
}
private void sub2_add_to_db_btn_Click(object sender, EventArgs e)
{
Add_Substance_To_Database(
substanse2, sub2_add_to_db_btn, sub1_add_to_db_btn, sub2_found_in_db_list,
sub1_found_in_db_list, false, sub2_listBox, sub1_listBox);
}
我想知道是否有其他更有效的方法来做到这一点。谢谢。
编辑:
这就是我的一些代码的样子,这让我很疯狂!!!
private void sub1_add_to_db_btn_Click(object sender, EventArgs e)
{
Add_Substance_To_Database(substanse1, sub1_add_to_db_btn, sub2_add_to_db_btn,
sub1_found_in_db_list, sub2_found_in_db_list, false, sub1_listBox, sub2_listBox);
}
private void sub2_add_to_db_btn_Click(object sender, EventArgs e)
{
Add_Substance_To_Database(substanse2, sub2_add_to_db_btn, sub1_add_to_db_btn,
sub2_found_in_db_list, sub1_found_in_db_list, false, sub2_listBox, sub1_listBox);
}
private void sub1_edit_name_btn_Click(object sender, EventArgs e)
{
Add_Substance_To_Database(substanse1, sub1_add_to_db_btn, sub2_add_to_db_btn,
sub1_found_in_db_list, sub2_found_in_db_list, true, sub1_listBox, sub2_listBox);
}
private void sub2_edit_name_btn_Click(object sender, EventArgs e)
{
Add_Substance_To_Database(substanse2, sub2_add_to_db_btn, sub1_add_to_db_btn,
sub2_found_in_db_list, sub1_found_in_db_list, true, sub2_listBox, sub1_listBox);
}
private void sub1_delete_from_db_btn_Click(object sender, EventArgs e)
{
Delete_Substance_From_DB(sub1_listBox,
sub2_listBox,sub2_list_is_from_file,sub1_delete_from_db_btn,
sub2_delete_from_db_btn);
}
private void sub2_delete_from_db_btn_Click(object sender, EventArgs e)
{
Delete_Substance_From_DB(sub2_listBox,
sub1_listBox,sub1_list_is_from_file,sub2_delete_from_db_btn,
sub1_delete_from_db_btn);
}
例如: 如果我想删除一种物质,我需要从两个列表中删除它并从其他列表中删除它,将选择更改为下一个物质等...
【问题讨论】:
-
您可以将同一个事件处理程序连接到多个按钮,然后根据发送者选择要运行的 Add_Substance_To_Database 变体。但是,您实际上可能会发现更改 UI 以使 material1 和其他变量参数来自下拉列表等控件会更好。您有可以展示的 GUI 示例吗?
-
出于隐私原因,我不想发布 GUI。问题是,为了方便起见,我必须将 2 个物质列表并排比较。从一个列表中选择一种物质的每次选择都将执行一些与从另一个列表中选择的其他物质相关的比较操作。在每个列表旁边还有一些按钮,例如:删除、编辑、添加到数据库等等......每个按钮都有类似于我上面写的方法。
-
为什么要将按钮和列表框传递给函数?我可以理解的列表框,因为您可能正在查看物质 1 列表和物质 2 列表中的内容。严格来说,如果您让用户从每个列表中选择两个项目,您可以只将所选项目和列表传递给您的方法 - 例如,您可以在每个列表中搜索 Add_Substance_To_Database 中的物质。
-
传递按钮的原因是因为列表框是多用途的。当我按下一个名为“从数据库显示”的按钮时,列表显示来自数据库而不是本地文件的物质,并且按钮更改为“从文件显示”。此外,当列表处于数据库模式时,必须禁用“添加到数据库”按钮。大多数情况下,我的所有按钮都启用/禁用到列表的当前“状态”。这就是为什么我需要将相关按钮引用传递给每个方法。
标签: c# winforms methods code-duplication