gpt4 book ai didi

.net - 使用 F# 和 Eto.Forms 捕获箭头键

转载 作者:行者123 更新时间:2023-12-03 07:52:11 25 4
gpt4 key购买 nike

在 Linux 上使用 F# 和 Eto.Forms,带有 Gtk3 后端。

编辑:添加更新到 this google groups thread .我目前最好的理论是,Eto 在其 Gtk 后端向小部件添加按键事件的方式不允许您在默认处理程序处理它们并阻止信号进一步传播之前捕获事件。

我正在尝试以一种形式捕获 KeyDown 事件:

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)
// ...
)

但我遇到了这个问题:
Up, Down, Left and Right arrow keys do not trigger KeyDown event

我无法弄清楚如何遵循那里提供的解决方案(覆盖 PreviewKeyDown 并设置 e.IsInputKey = true )。我尝试添加以下内容:
f.PreviewKeyDown.Add(fun e -> e.IsInputKey <- true)

但这只是提示 f.PreviewKeyDown不存在。

编辑:可能是 this Gtk#-specific issue而不是上面那个

As of release 0.15, Gtk# started using the CONNECT_AFTER flag when connecting event handlers to signals. This means that the event handlers are not run until after the default signal handlers, which means that the widget will be updated when the event handlers run. A side effect of this change is that in the case where default handlers return true to stop signal propagation, Gtk# events will not be emitted.



更多细节:如果我同时按住修饰键(例如 shift + 向上箭头),则 KeyDown触发器和 e.Key匹配 Keys.Up .还有 KeyUp总是触发,即使 KeyDown才不是。

最佳答案

处理完事件后,尝试在事件处理程序中返回 false。

关于.net - 使用 F# 和 Eto.Forms 捕获箭头键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36965432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com