.net f# gtk3 eto

.net - Capturando teclas de flecha con F#y Eto.Forms



gtk3 (0)

Usando F # y Eto.Forms en Linux, con el backend Gtk3.

EDITAR: Agregar actualizaciones a este hilo de grupos de Google . Mi mejor teoría actual es que la forma en que Eto agrega eventos de pulsación de teclas a un widget en su back-end de Gtk no le permite capturar eventos antes de que un controlador predeterminado los maneje y detenga la propagación de la señal.

Estoy tratando de capturar eventos de KeyDown en una forma:

let f = new Form(Topmost=true, ClientSize = new Size(600, 480)) f.KeyDown.Add(fun e -> match e.Key with | Keys.Up -> cursor.Move(Move_Up) // ... )

pero me encuentro con este problema: las teclas de flecha arriba, abajo, izquierda y derecha no activan el evento KeyDown

No puedo averiguar cómo seguir la solución provista allí (anular PreviewKeyDown y establecer e.IsInputKey = true ). Intenté agregar lo siguiente:

f.PreviewKeyDown.Add(fun e -> e.IsInputKey <- true)

pero eso solo se quejó de que f.PreviewKeyDown no existía.

EDITAR: podría ser este problema específico de Gtk # en lugar del anterior

A partir de la versión 0.15, Gtk # comenzó a usar el indicador CONNECT_AFTER al conectar los controladores de eventos a las señales. Esto significa que los controladores de eventos no se ejecutan hasta después de los controladores de señal predeterminados, lo que significa que el widget se actualizará cuando se ejecuten los controladores de eventos. Un efecto secundario de este cambio es que, en el caso de que los controladores predeterminados devuelvan verdadero para detener la propagación de la señal, no se emitirán los eventos Gtk #.

Más detalles: si también KeyDown una tecla modificadora (por ejemplo, shift + flecha arriba), entonces KeyDown dispara y e.Key coincide con Keys.Up También KeyUp siempre se dispara, incluso cuando KeyDown no lo hace.