Tengo un control WebBrowser que muestra algo de HTML.
Quiero que el usuario pueda copiar el documento completo, pero no hacer nada más.Atajos de teclado de WebBrowser
He configurado las propiedades IsWebBrowserContextMenuEnabled
y WebBrowserShortcutsEnabled
a false
, y quiero manejar KeyUp
y ejecutar código cuando el usuario presiona Ctrl + C.
¿Cómo puedo hacer eso?
El control WebBrowser no admite eventos de teclado.
Intenté usar el evento KeyUp
del formulario con KeyPreview
, pero no se activó en absoluto.
EDIT: Esta es mi solución, inspirada por la respuesta de Jerb.
class CopyableWebBrowser : WebBrowser {
public override bool PreProcessMessage(ref Message msg) {
if (msg.Msg == 0x101 //WM_KEYUP
&& msg.WParam.ToInt32() == (int)Keys.C && ModifierKeys == Keys.Control) {
DoCopy();
return true;
}
return base.PreProcessMessage(ref msg);
}
void DoCopy() {
Document.ExecCommand("SelectAll", false, null);
Document.ExecCommand("Copy", false, null);
Document.ExecCommand("Unselect", false, null);
}
}
Esto casi funciona, pero no puede obtener un mensaje de CTRL + C. Si presiono C, 'keyData' es' C', pero si presiono Control, con o sin otra clave, 'keyData' es' LButton | ShiftKey | Control', y no hay manera de determinar qué otra tecla, si la hubo, se presionó. – SLaks
La última declaración de caso "case Keys.Control | Keys.N" está haciendo exactamente lo que estás tratando de hacer. El | se usa para atrapar varias llaves. por lo que "case Keys.Control | Keys.C:" debería hacer el truco. – Jerb