Ciao
Per la tastiera virtuale innanzitutto ti consiglio di farla in un controllo utente, così la puoi gestire come vuoi e tieni il codice decisamente più pulito. (inoltre la puoi esportare più facilmente in ogni altro progetto)
Inoltre invece di fare l'invio del carattere ad ogni pressione del bottone ti consiglio di "collegare" la tastiera sullo schermo alle funzioni lanciate dalla tastiera standard, così hai dovrai gestire l'input di una sola tastiera.
per far ciò basta che lanci al click di un pulsante il comando keydown... faccio l'esempio del click sul pulsante c:
Quindi quando dalla tastiera video si clicca bt_c è come se si fosse premuto il tasto c... il resto del codice lo crei come se tu avessi una tastiera normale