在我当前的项目中,我在不同的标签中使用了四个网格视图。随着系统的发展,它们有一些共享方法,例如显示自定义工具提示和行时的右键菜单。
我现在正在进行代码清理练习。我在下面看到的是,我现在有四个事件处理程序调用相同的方法。是否可以将事件处理程序更改为直接指向GridMenu,从而避免额外的代码?这会在以后的开发中引起我的问题吗?
显然目前我使用默认的偶数处理程序名称。
private void grdEnquiriesLevel1_ShowGridMenu(object sender, GridMenuEventArgs e)
{
GridMenu(sender, e);
}
private void grdApplicantsLevel1_ShowGridMenu(object sender, GridMenuEventArgs e)
{
GridMenu(sender, e);
}
private void grdApplicationsLevel1_ShowGridMenu(object sender, GridMenuEventArgs e)
{
GridMenu(sender, e);
}
private void grdInterviewsLevel1_ShowGridMenu(object sender, GridMenuEventArgs e)
{
GridMenu(sender, e);
}
private void GridMenu(object sender, GridMenuEventArgs e)
{
GridView view = (GridView)sender;
if (view.CalcHitInfo(e.Point).InRow)
popupMenu1.ShowPopup(Cursor.Position);
}
答案 0 :(得分:10)
不是直接注册到GridMenu
,而是创建一个名为Grid_ShowGridMenu
的通用事件处理程序。
只需为每个网格注册相同的事件处理程序,而不是为每个网格创建单独的事件处理程序。
grdEnquiriesLevel1.ShowGridMenu += Grid_ShowGridMenu;
grdApplicantsLevel1.ShowGridMenu += Grid_ShowGridMenu;
grdApplicationsLevel1.ShowGridMenu += Grid_ShowGridMenu;
grdInterviewsLevel1.ShowGridMenu += Grid_ShowGridMenu;
private void Grid_ShowGridMenu(object sender, GridMenuEventArgs e)
{
GridMenu((GridView)sender, e.Point);
}
现在,不要将sender, e
直接传递给GridMenu
,而只将必要的值传递给GridMenu
并更改GridMenu
的签名,以便它可以更多可重复使用。
private void GridMenu(GridView grid, Point hitPoint)
{
if (grid.CalcHitInfo(hitPoint).InRow)
popupMenu1.ShowPopup(Cursor.Position);
}
答案 1 :(得分:0)
只要事件代码对所有控件都是通用的,那么这种方法就很好而且干净。
如果您在代码中开始使用主要的if / else或switch块,那么可能是重新思考的时候了。
答案 2 :(得分:0)
您应该创建一个封装自定义网格的用户控件。这样,您的所有行为都将被封装并可重复使用。