How do you handle Control keys when using Window.TextInput

So when using Window.TextInput += SomeMethod; Im finding that some control keys are passed thru to the raised method were others are not. For example backspace and enter raise the event but shift control or alt ect don’t.
Further backspace and enter return the escape characters /n or /b.

This seems wrong as it would be nice if all control keys pressed were passed in as a separate string to the raised event so that if i typed A or a i got whichever thru the key argument but… If i had shift held i also could query another passed string or two like ControlKeyPressed 1 or 2 and get Shift back or some code value like i could get a Shift and Alt code or none if no control keys were pressed.

This leaves you left with a strange situation to were i can only see the solution as mixing KeyboardState state with text input. You might say well why not just use keyboard state but it doesn’t distinguish between lower case and uppercase and remapping on holding shift, im not sure how this would translate in a crossplatform scenario.

What i did so far was to make a method
UpdateControlKeysPressed which is called in update.
This makes a call to a class i made called KeyInfo that determines what kind of key is pressed via if (KeyInfo.IsControl(key)) which passes that to a raised delegate to fire.
So basically i have this situation that looks like the below so far.

Which just makes me think i don’t understand the right way to handle this sort of situation, So im looking for input on how other people handle this,

                // test
                public delegate void InputKeysEvent(StringBuilder n, Keys pressedKey);
                public event InputKeysEvent OnKeysPressed;


                public void TakeTextInput(object sender, TextInputEventArgs args)
                {
                    if (KeyInfo.IsControl(args.Key) == false)
                    {
                        tempStr.Clear();
                        tempStr.Append(args.Character);
                        wt.UserTypedInput(tempStr, Keys.None);  // i dont like this being here i need to get this uniformed
                    }
                }
                public void TakeControlKeyInput(StringBuilder sb, Keys pressedKeys)
                {
                    sb.Clear();
                    wt.UserTypedInput(sb, pressedKeys); // i dont like this being here i need to get this uniformed
                }

                protected override void Initialize()
                {
                    Window.TextInput += TakeTextInput;

                    OnKeysPressed += TakeControlKeyInput;

                    base.Initialize();
                }

                public void UpdateControlKeysPressed(GameTime gameTime)
                {
                    KeyboardState state = Keyboard.GetState();
                    if (state.IsKeyDown(Keys.Escape)) Exit();

                    var result = ControlKeyDelayTimer.Update((float)gameTime.ElapsedGameTime.TotalSeconds);
                    if (result)
                    {
                        var keys = state.GetPressedKeys();
                        // clear the stringbuilder.
                        tempStr.Clear();
                        // its not null and a key was pressed
                        if (keys.Length > 0 && OnKeysPressed != null)
                        {
                            if (KeyInfo.IsControl(keys[0]))
                            {
                                OnKeysPressed(tempStr, keys[0]);
                                ControlKeyDelayTimer.ResetElapsedToZero();
                            }
                            //Console.WriteLine( "key "+ keys[0].ToString()  + " isControl "+ KeyInfo.IsControl(keys[0]).ToString() );
                        }
                    }
                }

Then i have the key info class which i basically had to sort of halfway hand edit i hate enums. This really just returns if a key is a control key atm.

    /// <summary>
    /// Contains additional information pertaining to monogames returned keys. 
    /// Offers additional info about the type of key being queryed.
    /// </summary>
    public class KeyInfo
    {
        // All these classifications should be designated by power of two for future additions later.
        private const int NO_KEY = 0;
        private const int CHAR_KEY = 1;
        private const int NUMERICAL_KEY = 2;
        private const int EXTENDED_CHAR_KEY = 4;
        private const int MATHEMATICAL_OPERATION_KEY = 8;
        private const int CONTROL_KEY = 16;

        private static KeyInfoItem[] keysInfo = new KeyInfoItem[255]
        {
            new KeyInfoItem( 0 , "None" , NO_KEY ),
            new KeyInfoItem( 1 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 2 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 3 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 4 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 5 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 6 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 7 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 8 , "Back" , CONTROL_KEY ),
            new KeyInfoItem( 9 , "Tab" , CONTROL_KEY ),
            new KeyInfoItem( 10 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 11 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 12 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 13 , "Enter" , CONTROL_KEY ),
            new KeyInfoItem( 14 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 15 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 16 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 17 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 18 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 19 , "Pause" , CONTROL_KEY ),
            new KeyInfoItem( 20 , "CapsLock" , CONTROL_KEY ),
            new KeyInfoItem( 21 , "Kana" , CONTROL_KEY ),
            new KeyInfoItem( 22 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 23 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 24 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 25 , "Kanji" , CONTROL_KEY ),
            new KeyInfoItem( 26 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 27 , "Escape" , CONTROL_KEY ),
            new KeyInfoItem( 28 , "ImeConvert" , CONTROL_KEY ),
            new KeyInfoItem( 29 , "ImeNoConvert" , CONTROL_KEY ),
            new KeyInfoItem( 30 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 31 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 32 , "Space" , CHAR_KEY ),
            new KeyInfoItem( 33 , "PageUp" , CONTROL_KEY ),
            new KeyInfoItem( 34 , "PageDown" , CONTROL_KEY ),
            new KeyInfoItem( 35 , "End" , CONTROL_KEY ),
            new KeyInfoItem( 36 , "Home" , CONTROL_KEY ),
            new KeyInfoItem( 37 , "Left" , CONTROL_KEY ),
            new KeyInfoItem( 38 , "Up" , CONTROL_KEY ),
            new KeyInfoItem( 39 , "Right" , CONTROL_KEY ),
            new KeyInfoItem( 40 , "Down" , CONTROL_KEY ),
            new KeyInfoItem( 41 , "Select" , CONTROL_KEY ),
            new KeyInfoItem( 42 , "Print" , CONTROL_KEY ),
            new KeyInfoItem( 43 , "Execute" , CONTROL_KEY ),
            new KeyInfoItem( 44 , "PrintScreen" , CONTROL_KEY ),
            new KeyInfoItem( 45 , "Insert" , CONTROL_KEY ),
            new KeyInfoItem( 46 , "Delete" , CONTROL_KEY ),
            new KeyInfoItem( 47 , "Help" , CONTROL_KEY ),
            new KeyInfoItem( 48 , "D0" , NUMERICAL_KEY ),
            new KeyInfoItem( 49 , "D1" , NUMERICAL_KEY ),
            new KeyInfoItem( 50 , "D2" , NUMERICAL_KEY ),
            new KeyInfoItem( 51 , "D3" , NUMERICAL_KEY ),
            new KeyInfoItem( 52 , "D4" , NUMERICAL_KEY ),
            new KeyInfoItem( 53 , "D5" , NUMERICAL_KEY ),
            new KeyInfoItem( 54 , "D6" , NUMERICAL_KEY ),
            new KeyInfoItem( 55 , "D7" , NUMERICAL_KEY ),
            new KeyInfoItem( 56 , "D8" , NUMERICAL_KEY ),
            new KeyInfoItem( 57 , "D9" , NUMERICAL_KEY ),
            new KeyInfoItem( 58 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 59 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 60 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 61 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 62 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 63 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 64 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 65 , "A" , CHAR_KEY ),
            new KeyInfoItem( 66 , "B" , CHAR_KEY ),
            new KeyInfoItem( 67 , "C" , CHAR_KEY ),
            new KeyInfoItem( 68 , "D" , CHAR_KEY ),
            new KeyInfoItem( 69 , "E" , CHAR_KEY ),
            new KeyInfoItem( 70 , "F" , CHAR_KEY ),
            new KeyInfoItem( 71 , "G" , CHAR_KEY ),
            new KeyInfoItem( 72 , "H" , CHAR_KEY ),
            new KeyInfoItem( 73 , "I" , CHAR_KEY ),
            new KeyInfoItem( 74 , "J" , CHAR_KEY ),
            new KeyInfoItem( 75 , "K" , CHAR_KEY ),
            new KeyInfoItem( 76 , "L" , CHAR_KEY ),
            new KeyInfoItem( 77 , "M" , CHAR_KEY ),
            new KeyInfoItem( 78 , "N" , CHAR_KEY ),
            new KeyInfoItem( 79 , "O" , CHAR_KEY ),
            new KeyInfoItem( 80 , "P" , CHAR_KEY ),
            new KeyInfoItem( 81 , "Q" , CHAR_KEY ),
            new KeyInfoItem( 82 , "R" , CHAR_KEY ),
            new KeyInfoItem( 83 , "S" , CHAR_KEY ),
            new KeyInfoItem( 84 , "T" , CHAR_KEY ),
            new KeyInfoItem( 85 , "U" , CHAR_KEY ),
            new KeyInfoItem( 86 , "V" , CHAR_KEY ),
            new KeyInfoItem( 87 , "W" , CHAR_KEY ),
            new KeyInfoItem( 88 , "X" , CHAR_KEY ),
            new KeyInfoItem( 89 , "Y" , CHAR_KEY ),
            new KeyInfoItem( 90 , "Z" , CHAR_KEY ),
            new KeyInfoItem( 91 , "LeftWindows" , CONTROL_KEY ),
            new KeyInfoItem( 92 , "RightWindows" , CONTROL_KEY ),
            new KeyInfoItem( 93 , "Apps" , CONTROL_KEY ),
            new KeyInfoItem( 94 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 95 , "Sleep" , CONTROL_KEY ),
            new KeyInfoItem( 96 , "NumPad0" , CONTROL_KEY ),
            new KeyInfoItem( 97 , "NumPad1" , CONTROL_KEY ),
            new KeyInfoItem( 98 , "NumPad2" , CONTROL_KEY ),
            new KeyInfoItem( 99 , "NumPad3" , CONTROL_KEY ),
            new KeyInfoItem( 100 , "NumPad4" , CONTROL_KEY ),
            new KeyInfoItem( 101 , "NumPad5" , CONTROL_KEY ),
            new KeyInfoItem( 102 , "NumPad6" , CONTROL_KEY ),
            new KeyInfoItem( 103 , "NumPad7" , CONTROL_KEY ),
            new KeyInfoItem( 104 , "NumPad8" , CONTROL_KEY ),
            new KeyInfoItem( 105 , "NumPad9" , CONTROL_KEY ),
            new KeyInfoItem( 106 , "Multiply" , CHAR_KEY + MATHEMATICAL_OPERATION_KEY + EXTENDED_CHAR_KEY),
            new KeyInfoItem( 107 , "Add" , CHAR_KEY + MATHEMATICAL_OPERATION_KEY + EXTENDED_CHAR_KEY),
            new KeyInfoItem( 108 , "Separator" , CHAR_KEY  + EXTENDED_CHAR_KEY),
            new KeyInfoItem( 109 , "Subtract" , CHAR_KEY + MATHEMATICAL_OPERATION_KEY  + EXTENDED_CHAR_KEY),
            new KeyInfoItem( 110 , "Decimal" , CHAR_KEY  + EXTENDED_CHAR_KEY),
            new KeyInfoItem( 111 , "Divide" , CHAR_KEY + MATHEMATICAL_OPERATION_KEY + EXTENDED_CHAR_KEY),
            new KeyInfoItem( 112 , "F1" , CONTROL_KEY ),
            new KeyInfoItem( 113 , "F2" , CONTROL_KEY ),
            new KeyInfoItem( 114 , "F3" , CONTROL_KEY ),
            new KeyInfoItem( 115 , "F4" , CONTROL_KEY ),
            new KeyInfoItem( 116 , "F5" , CONTROL_KEY ),
            new KeyInfoItem( 117 , "F6" , CONTROL_KEY ),
            new KeyInfoItem( 118 , "F7" , CONTROL_KEY ),
            new KeyInfoItem( 119 , "F8" , CONTROL_KEY ),
            new KeyInfoItem( 120 , "F9" , CONTROL_KEY ),
            new KeyInfoItem( 121 , "F10" , CONTROL_KEY ),
            new KeyInfoItem( 122 , "F11" , CONTROL_KEY ),
            new KeyInfoItem( 123 , "F12" , CONTROL_KEY ),
            new KeyInfoItem( 124 , "F13" , CONTROL_KEY ),
            new KeyInfoItem( 125 , "F14" , CONTROL_KEY ),
            new KeyInfoItem( 126 , "F15" , CONTROL_KEY ),
            new KeyInfoItem( 127 , "F16" , CONTROL_KEY ),
            new KeyInfoItem( 128 , "F17" , CONTROL_KEY ),
            new KeyInfoItem( 129 , "F18" , CONTROL_KEY ),
            new KeyInfoItem( 130 , "F19" , CONTROL_KEY ),
            new KeyInfoItem( 131 , "F20" , CONTROL_KEY ),
            new KeyInfoItem( 132 , "F21" , CONTROL_KEY ),
            new KeyInfoItem( 133 , "F22" , CONTROL_KEY ),
            new KeyInfoItem( 134 , "F23" , CONTROL_KEY ),
            new KeyInfoItem( 135 , "F24" , CONTROL_KEY ),
            new KeyInfoItem( 136 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 137 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 138 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 139 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 140 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 141 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 142 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 143 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 144 , "NumLock" , CONTROL_KEY ),
            new KeyInfoItem( 145 , "Scroll" , CONTROL_KEY ),
            new KeyInfoItem( 146 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 147 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 148 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 149 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 150 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 151 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 152 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 153 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 154 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 155 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 156 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 157 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 158 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 159 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 160 , "LeftShift" , CONTROL_KEY ),
            new KeyInfoItem( 161 , "RightShift" , CONTROL_KEY ),
            new KeyInfoItem( 162 , "LeftControl" , CONTROL_KEY ),
            new KeyInfoItem( 163 , "RightControl" , CONTROL_KEY ),
            new KeyInfoItem( 164 , "LeftAlt" , CONTROL_KEY ),
            new KeyInfoItem( 165 , "RightAlt" , CONTROL_KEY ),
            new KeyInfoItem( 166 , "BrowserBack" , CONTROL_KEY ),
            new KeyInfoItem( 167 , "BrowserForward" , CONTROL_KEY ),
            new KeyInfoItem( 168 , "BrowserRefresh" , CONTROL_KEY ),
            new KeyInfoItem( 169 , "BrowserStop" , CONTROL_KEY ),
            new KeyInfoItem( 170 , "BrowserSearch" , CONTROL_KEY ),
            new KeyInfoItem( 171 , "BrowserFavorites" , CONTROL_KEY ),
            new KeyInfoItem( 172 , "BrowserHome" , CONTROL_KEY ),
            new KeyInfoItem( 173 , "VolumeMute" , CONTROL_KEY ),
            new KeyInfoItem( 174 , "VolumeDown" , CONTROL_KEY ),
            new KeyInfoItem( 175 , "VolumeUp" , CONTROL_KEY ),
            new KeyInfoItem( 176 , "MediaNextTrack" , CONTROL_KEY ),
            new KeyInfoItem( 177 , "MediaPreviousTrack" , CONTROL_KEY),
            new KeyInfoItem( 178 , "MediaStop" , CONTROL_KEY ),
            new KeyInfoItem( 179 , "MediaPlayPause" , CONTROL_KEY ),
            new KeyInfoItem( 180 , "LaunchMail" , CONTROL_KEY ),
            new KeyInfoItem( 181 , "SelectMedia" , CONTROL_KEY ),
            new KeyInfoItem( 182 , "LaunchApplication1" , CONTROL_KEY ),
            new KeyInfoItem( 183 , "LaunchApplication2" , CONTROL_KEY),
            new KeyInfoItem( 184 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 185 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 186 , "OemSemicolon" , CHAR_KEY  + EXTENDED_CHAR_KEY),
            new KeyInfoItem( 187 , "OemPlus" , CHAR_KEY + MATHEMATICAL_OPERATION_KEY),
            new KeyInfoItem( 188 , "OemComma" , CHAR_KEY  + EXTENDED_CHAR_KEY),
            new KeyInfoItem( 189 , "OemMinus" , CHAR_KEY + MATHEMATICAL_OPERATION_KEY),
            new KeyInfoItem( 190 , "OemPeriod" , CHAR_KEY  + EXTENDED_CHAR_KEY),
            new KeyInfoItem( 191 , "OemQuestion" , CHAR_KEY  + EXTENDED_CHAR_KEY),
            new KeyInfoItem( 192 , "OemTilde" , CHAR_KEY  + EXTENDED_CHAR_KEY),
            new KeyInfoItem( 193 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 194 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 195 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 196 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 197 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 198 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 199 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 200 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 201 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 202 , "ChatPadGreen" , CONTROL_KEY ),
            new KeyInfoItem( 203 , "ChatPadOrange" , CONTROL_KEY ),
            new KeyInfoItem( 204 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 205 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 206 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 207 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 208 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 209 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 210 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 211 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 212 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 213 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 214 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 215 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 216 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 217 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 218 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 219 , "OemOpenBrackets" , CHAR_KEY  + EXTENDED_CHAR_KEY),
            new KeyInfoItem( 220 , "OemPipe" , CHAR_KEY  + EXTENDED_CHAR_KEY),
            new KeyInfoItem( 221 , "OemCloseBrackets" , CHAR_KEY  + EXTENDED_CHAR_KEY),
            new KeyInfoItem( 222 , "OemQuotes" , CHAR_KEY  + EXTENDED_CHAR_KEY),
            new KeyInfoItem( 223 , "Oem8" , CHAR_KEY ),
            new KeyInfoItem( 224 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 225 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 226 , "OemBackslash" , CHAR_KEY  + EXTENDED_CHAR_KEY),
            new KeyInfoItem( 227 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 228 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 229 , "ProcessKey" , CONTROL_KEY ),
            new KeyInfoItem( 230 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 231 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 232 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 233 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 234 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 235 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 236 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 237 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 238 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 239 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 240 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 241 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 242 , "OemCopy" , CONTROL_KEY ),
            new KeyInfoItem( 243 , "OemAuto" , CONTROL_KEY ),
            new KeyInfoItem( 244 , "OemEnlW" , CONTROL_KEY ),
            new KeyInfoItem( 245 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 246 , "Attn" , CONTROL_KEY ),
            new KeyInfoItem( 247 , "Crsel" , CONTROL_KEY ),
            new KeyInfoItem( 248 , "Exsel" ,CONTROL_KEY ),
            new KeyInfoItem( 249 , "EraseEof" , CONTROL_KEY ),
            new KeyInfoItem( 250 , "Play" , CONTROL_KEY ),
            new KeyInfoItem( 251 , "Zoom" , CONTROL_KEY ),
            new KeyInfoItem( 252 , "UnDefined" , NO_KEY ),
            new KeyInfoItem( 253 , "Pa1" , CONTROL_KEY ),
            new KeyInfoItem( 254 , "OemClear" , CONTROL_KEY )
        };

        /// <summary>
        /// Returns true if the key is a control key such as shift enter ect...
        /// </summary>
        public static bool IsControl(Keys key)
        {
            if (keysInfo[(int)key].keyType >= CONTROL_KEY)
                return true;
            else
                return false;
        }

        private class KeyInfoItem
        {
            public string character = "";
            int keyValue = 0;
            public int keyType = 0;
            public KeyInfoItem(int keyValue, string characterName, int keytype)
            {
                this.keyValue = keyValue;
                character = characterName;
                keyType = keytype;
            }
        }
    }

I mean this works on the instance that needs the input i just end up with one method there essentially the control keys or char key are passed or both in case of both, but it looks very wrong to me.