public InputEventKeyboard(KeyboardEventType eventType, InputEventKeyboard parent) : base(parent) { m_eventType = eventType; m_keyCode = parent.m_keyCode; m_keyDataExtra = parent.m_keyDataExtra; }
protected override void keyboardInput(InputEventKeyboard e) { switch (e.KeyCode) { case WinKeys.Back: if (Text.Length > 0) { Text = Text.Substring(0, Text.Length - 1); } break; case WinKeys.Tab: m_owner.KeyboardTabToNextFocus(this); break; case WinKeys.Enter: m_owner.ActivateByKeyboardReturn(EntryID, Text); break; default: if (e.IsChar) { Text += e.KeyChar; } break; } }
private void onKeyUp(InputEventKeyboard e) { addEvent(new InputEventKeyboard(KeyboardEventType.Up, e)); }
private void onKeyDown(InputEventKeyboard e) { // handle the initial key down if (e.Data_PreviousState == 0) { addEvent(new InputEventKeyboard(KeyboardEventType.Down, e)); } // handle the key presses. Possibly multiple per keydown message. for (int i = 0; i < e.Data_RepeatCount; i++) { addEvent(new InputEventKeyboard(KeyboardEventType.Press, e)); } }
private void onKeyChar(InputEventKeyboard e) { // Control key sends a strange wm_char message ... if (e.Control && !e.Alt) return; InputEventKeyboard pressEvent = LastKeyPressEvent; if (pressEvent == null) Logging.Fatal("No corresponding KeyPress event for this WM_CHAR message. Please report this error to [email protected]"); else { pressEvent.OverrideKeyChar(e.KeyCode); } }
protected override bool OnKeyboardKeyPress(InputEventKeyboard e) { switch (e.KeyCode) { case WinKeys.Back: //Backspace => remove selected or remove before cursor if (Model.HasSelected) { Model.RemoveSelected(); } else { Model.BackSpace(); } return true; case WinKeys.Enter: // Enter / Return / Newlines currently not supported. return true; case WinKeys.C: if (e.Control) { // Ctrl + C => Copy Clipboard.SetDataObject(Model.GetSelected(), true); return true; } break; case WinKeys.V: if (e.Control) { // Ctrl + P => Paste if (Model.HasSelected) Model.RemoveSelected(); var dataObject = Clipboard.GetDataObject(); if (dataObject != null) { string text = dataObject.GetData(DataFormats.Text).ToString(); Model.Insert(text); } return true; } break; case WinKeys.X: if (e.Control) { // Ctrl + X => Cut if (Model.HasSelected) { Clipboard.SetDataObject(Model.GetSelected(), true); Model.RemoveSelected(); } return true; } break; } if (Model.Length != 0) { switch (e.KeyCode) { case WinKeys.Left: Model.CursorPosition--; Model.SelectCursorPosition = null; return true; case WinKeys.Right: Model.CursorPosition++; Model.SelectCursorPosition = null; return true; case WinKeys.Up: Model.CursorPosition = 0; Model.SelectCursorPosition = null; return true; case WinKeys.Down: Model.CursorPosition = Model.Length; Model.SelectCursorPosition = null; return true; case WinKeys.Delete: Model.Delete(); Model.SelectCursorPosition = null; return true; } } if (e.IsChar) { //Add the character if (Model.HasSelected) { Model.RemoveSelected(); Model.SelectCursorPosition = null; } Model.Insert(e.KeyChar); } return false; }
/// <summary> /// Reads the supplied message and executes any Keyboard events required. /// </summary> /// <param name="message">The Message to parse</param> /// <returns>A Boolean value indicating wether the Key events were handled or not</returns> private void WmKeyEvent(ref Message message) { // HandleKeyBindings(); // KeyPressEventArgs keyPressEventArgs = null; if ((message.Id == NativeConstants.WM_CHAR) || (message.Id == NativeConstants.WM_SYSCHAR)) { // Is this extra information necessary? // wm_(sys)char: http://msdn.microsoft.com/en-us/library/ms646276(VS.85).aspx InputEventKeyboard e = new InputEventKeyboard(KeyboardEventType.Press, (WinKeys)(int)(long)message.WParam, (int)(long)message.LParam, ModifierKeys ); IntPtr zero = (IntPtr)0;// (char)((ushort)((long)message.WParam)); invokeChar(e); } else { // wm_(sys)keydown: http://msdn.microsoft.com/en-us/library/ms912654.aspx // wm_(sys)keyup: http://msdn.microsoft.com/en-us/library/ms646281(VS.85).aspx if ((message.Id == NativeConstants.WM_KEYDOWN) || (message.Id == NativeConstants.WM_SYSKEYDOWN)) { InputEventKeyboard e = new InputEventKeyboard(KeyboardEventType.Down, (WinKeys)(int)(long)message.WParam, (int)(long)message.LParam, ModifierKeys ); invokeKeyDown(e); } else if ((message.Id == NativeConstants.WM_KEYUP) || (message.Id == NativeConstants.WM_SYSKEYUP)) { InputEventKeyboard e = new InputEventKeyboard(KeyboardEventType.Up, (WinKeys)(int)(long)message.WParam, (int)(long)message.LParam, ModifierKeys ); invokeKeyUp(e); } } }
/// <summary> /// Raises the KeyUp event. Override this method to add code to handle when a key is released /// </summary> /// <param name="e">KeyboardPressEventArgs for the KeyUp event</param> private void invokeKeyUp(InputEventKeyboard e) { if (KeyUp != null) KeyUp(e); }
/// <summary> /// Raises the KeyDown event. Override this method to add code to handle when a key is pressed /// </summary> /// <param name="e">InputEventCKB for the KeyDown event</param> private void invokeKeyDown(InputEventKeyboard e) { if (KeyDown != null) KeyDown(e); }
/// <summary> /// Raises the OnChar event. Override this method to add code to handle when a WM_CHAR message is received /// </summary> /// <param name="e">InputEventCKB for the OnChar event</param> private void invokeChar(InputEventKeyboard e) { if (KeyChar != null) KeyChar(e); }
protected virtual bool OnKeyboardKeyUp(InputEventKeyboard e) { return false; }