Per undo e redo si intendono annulla e ripristina (in lingua italiaca) quindi la undo (annulla) annulla l'ultima modifica inserita e può essere ripetuta finchè esiste una cache di modifiche.. la stessa cosa con la redo nel senso contrario..
Io avevo già fatto una cosa simile e per farla ti conviene tenerti o in una lista di oggetti fatti da te che costituiscono la modifica fatta (ad esempio la scittura di una lettera o la cancellazione di una parola) o una lista di string con il testo pre-modifica (più grossolano)..
Ad ogni evento scaturito dalla textBox (keyDown principalmrnte) puoi così operare la undo o redo..