hellboy
hellboy

Reputation: 1618

Event handler has dependency on call order

On WinForm there is TreeView control.

In AfterSelect event is private field selectedFolder updated.

For event OnKeyDown for Delete key is event handler implemented that interacts data access layer : selectedFolder is passed as parameter to method DeleteFolder. The selected node of TreeView is also removed

Code has following issue: it works properly only if DeleteFolder called first:

  1. DeleteFolder(selectedFolder) // selectedFolder is OK
  2. #.SelectedNode.Remove

If I try :

  1. #.SelectedNode.Remove // AfterSelect is called. selectedFolder is now parent node
  2. DeleteFolder(selectedFolder) // selectedFolder is wrong

As I mentioned this code has bad smell. Is not it?

Should I make Pull down refactoring to make selectedFolder local variable. AfterSelect event handler should be removed.

  1. Fill selectedFolder local var based on selected node (code from AfterSelect event handler)
  2. #.SelectedNode.Remove
  3. DeleteFolder(selectedFolder)

In this case is not depended on call order of 2. and 3..

Upvotes: 0

Views: 57

Answers (1)

C.Evenhuis
C.Evenhuis

Reputation: 26446

In the KeyDown event handler you already access the TreeView when removing the node, so yes I would definitely grab the folder name from the node before performing the other two operations, even if the call order did not matter in the first place.

Upvotes: 1

Related Questions