From the code examples you posted my first reaction is that the code could be put in InteractiveChange and ProgrammiticChange and reomved from the tohers. Those events cover all the ways the value in the control could change. Usinge interactiveChange precludes the need to use the Click and Keypress events as any action that would fire Click or Keypress would also fire InteractiveChange. Adding the ProgrammicChange adds coverage for some code assigning a value to the control.
Also since the *Change events only fire the value has CHANGED it precludes the need to do most of the IF stuff that is checking to see if the value changed.