Igo*_*gor 0 c# methods code-duplication winforms
假设我有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);
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否有其他更有效的方法来做到这一点.谢谢.
编辑:
这是我的一些代码看起来像,它让我疯狂!
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);
}
Run Code Online (Sandbox Code Playgroud)
例如:如果我想删除一种物质,我需要从两个列表中删除它并将其从其他列表中删除,将选择更改为下一个物质等...
鉴于您将不同的值传递给Add_Substance_To_Database您现在拥有的值可能是您可以预期的最易维护的代码.
您可以将一个事件处理程序附加到两个按钮,但您必须确定按下了哪个按钮并传递相关参数:
if (sender == button1)
{
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);
}
else
{
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);
}
Run Code Online (Sandbox Code Playgroud)
哪个让你无处可去.