gpt4 book ai didi

c# - 在 C# 中重用事件处理程序的良好做法

转载 作者:太空狗 更新时间:2023-10-30 00:22:35 25 4
gpt4 key购买 nike

在我当前的项目中,我在不同的选项卡中使用了四个 GridView 。随着系统的发展,他们有一些共享的方法,例如在行上显示自定义工具提示和右键单击菜单。

我现在正在进行代码清理练习。我在下面看到的是我现在有四个事件处理程序调用相同的方法。是否可以将事件处理程序全部更改为直接指向 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);
}

最佳答案

不是直接注册到 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);
}

关于c# - 在 C# 中重用事件处理程序的良好做法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/641365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com