事件处理程序依赖于调用顺序

时间:2015-05-07 09:24:06

标签: c# winforms treeview refactoring anti-patterns

WinForm上有TreeView控件。

AfterSelect事件中,私有字段selectedFolder已更新。

对于OnKeyDown密钥的事件Delete,实现了与数据访问层交互的事件处理程序:selectedFolder作为参数传递给方法DeleteFolderTreeView所选节点也已删除

代码存在以下问题:仅在DeleteFolder首先调用时才能正常运行:

  1. DeleteFolderselectedFolder)// selectedFolder没问题
  2. #.SelectedNode.Remove
  3. 如果我尝试:

    1. #.SelectedNode.Remove // AfterSelect被调用。 selectedFolder现在是父节点
    2. DeleteFolderselectedFolder)// selectedFolder 错误
    3. 正如我提到的,这段代码有难闻的气味。不是吗?

      我是否应该Pull down重构以生成selectedFolder局部变量。 AfterSelect事件处理程序 已删除

      1. 根据所选节点填充selectedFolder本地var(来自AfterSelect事件处理程序的代码)
      2. #.SelectedNode.Remove
      3. DeleteFolderselectedFolder
      4. 在这种情况下,不依赖于2.3.的通话顺序。

1 个答案:

答案 0 :(得分:1)

KeyDown事件处理程序中,您在删除节点时已经访问了TreeView,所以是的,我肯定会在执行其他两个操作之前从节点中获取文件夹名称,即使呼叫顺序首先无关紧要