// I have a class which defines the following function (and arrays for it) public void Associate(Key key, char character) { mKeyCodes[(int)character] = key; textCodes[(int)key] = character; } // and in the constructor: Associate(Key.A, 'a'); Associate(Key.A, 'a'); Associate(Key.B, 'b'); Associate(Key.C, 'c'); Associate(Key.D, 'd'); Associate(Key.E, 'e'); Associate(Key.F, 'f'); Associate(Key.G, 'g'); Associate(Key.H, 'h'); Associate(Key.I, 'i'); Associate(Key.J, 'j'); Associate(Key.K, 'k'); Associate(Key.L, 'l'); Associate(Key.M, 'm'); Associate(Key.N, 'n'); Associate(Key.O, 'o'); Associate(Key.P, 'p'); Associate(Key.Q, 'q'); Associate(Key.R, 'r'); Associate(Key.S, 's'); Associate(Key.T, 't'); Associate(Key.U, 'u'); Associate(Key.V, 'v'); Associate(Key.W, 'w'); Associate(Key.X, 'x'); Associate(Key.Y, 'y'); Associate(Key.Z, 'z'); Associate(Key.D0, '0'); Associate(Key.D1, '1'); Associate(Key.D2, '2'); Associate(Key.D3, '3'); Associate(Key.D4, '4'); Associate(Key.D5, '5'); Associate(Key.D6, '6'); Associate(Key.D7, '7'); Associate(Key.D8, '8'); Associate(Key.D9, '9'); Associate(Key.NumPad0, '0'); Associate(Key.NumPad1, '1'); Associate(Key.NumPad2, '2'); Associate(Key.NumPad3, '3'); Associate(Key.NumPad4, '4'); Associate(Key.NumPad5, '5'); Associate(Key.NumPad6, '6'); Associate(Key.NumPad7, '7'); Associate(Key.NumPad8, '8'); Associate(Key.NumPad9, '9'); Associate(Key.Space, ' '); Associate(Key.Equals, '='); Associate(Key.SemiColon, ';'); Associate(Key.Slash, '/'); Associate(Key.BackSlash, '\\'); Associate(Key.Apostrophe, '\''); Associate(Key.LeftBracket, '['); Associate(Key.RightBracket, ']'); Associate(Key.Period, '.'); Associate(Key.NumPadPeriod, '.'); Associate(Key.Comma, ','); Associate(Key.Minus, '-'); Associate(Key.NumPadMinus, '-'); Associate(Key.Grave, '`');