C'est simple : tu ne changes jamais la valeur de tt, ni celle de vnkk ni de pr.
tt = " " + nekvas[n1] + nekvas[n1];
vnkk = " " + nekvas[n2] + nekvas[n2];
pr = " " + nekvas[n3] + nekvas[n3];
A chaque fois que tu appuies sur D, on se retrouve bien dans la boucle. Mais tu assignes toujours les mêmes valeurs à tes variables, sauf la première fois ou tu rajoutes un espace.
Une solution qui serait capable de reparer ton code et de le rendre + lisible à la fois serait de placer l'assignation de ces variables ainsi que ta série de Console.WriteLine dans une fonction qui recevrait en paramètres des valeurs qui s'incrémentent au sein du while. Vu que tu utilises deja des paramètres dans ton code, tu sais t'en servir, tu ne devrais pas avoir trop de difficultés à incrémenter le nombre d'espace à imprimer.
P.S : pour du code parsemé de string et de Console.WriteLine dans tout les sens, tu devrais jeter un coup d'oeil à String.Format ou a StringBuilder, y aurait bien moyen de nettoyer tout ca