Perché fai tutto quel pasticcio con gli switch? Rendi la funzione template e il problema finisce lì (e tra l'altro se cerchi in giro avevo già scritto qualcosa del genere, cerca AcquireInput nel forum).