标签: eto

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

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

编辑:添加此谷歌组线程的更新.我目前最好的理论是,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)
  // ...
  )
Run Code Online (Sandbox Code Playgroud)

但我遇到了这个问题: 向上,向下,向左和向右箭头键不会触发KeyDown事件

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

f.PreviewKeyDown.Add(fun e -> e.IsInputKey <- true)
Run Code Online (Sandbox Code Playgroud)

但那只是抱怨f.PreviewKeyDown说不存在.


编辑:这可能是这个Gtk#特定问题,而不是上面的问题

从版本0.15开始,Gtk#在将事件处理程序连接到信号时开始使用CONNECT_AFTER标志.这意味着事件处理程序直到默认信号处理程序之后才会运行,这意味着在事件处理程序运行时将更新窗口小部件.此更改的副作用是,在默认处理程序返回true以停止信号传播的情况下,将不会发出Gtk#事件.


更多细节:如果我同时按住修改键(例如shift +向上箭头),则KeyDown触发并e.Key匹配Keys.Up.也KeyUp总是触发,即使KeyDown没有.

.net f# gtk3 eto

36
推荐指数
1
解决办法
681
查看次数

跨平台UI模块,可与C#/ Mono后端配合使用

编辑1 2017年1月29日 -目前,我们的选择已经到电子结合EdgeJS和所有的力量的NodeJS上NPM那里包/资源.还有就是我们没有更好的选择,以创建跨平台的应用程序的所有三个plyers(macOS,linux和windows).感谢大家的投入.


ORIGINAL问题:
TL; DR - 用C#(.Net/Mono)编写的后端代码.编写需要对系统进行低级访问的桌面应用程序(跨平台OSX,Linux,Windows 7到10).寻找一站式跨平台UI工具/框架,可以通过轮询/消息传递或调用后端代码的代码来与后端代码的状态进行交互.这个"后端"包括例如扫描和列出过程信息,截取屏幕截图等.发送网络信息(访问了哪些网站等).这实际上是学生在进行在线考试时的考试监控器.教室.**

我们正在探索的选项:

  • 电子(以前称为原子壳)看起来不错,但我们不知道它是否可以互操作/调用/ kickstart C#/ Mono应用程序.也可以在他们的官方论坛上发布这个反馈,以及它是否是一个很好的电子用例.在一个理想的世界里,我们想完全使用电子,但不幸的是我认为我们需要特定于平台的逻辑(现在我们用C#w/.net和mono处理).
  • Eto.Forms是我们现在使用的,但它限制了它的UI功能 - 因为有时它仍然在不同的平台上呈现不同的(窗口大小).它还具有与用户平台相关的不同外观和感觉 - 这是一个很好的功能,但它使得难以制作专用控件来可视化状态,这在html/css中会更容易.

  • 另一种途径是Eto.Forms(或其他)之间的混合,用于引导本机UI,该UI在其窗口中托管浏览器,该窗口跨平台而不依赖于本地安装的浏览器,例如Awesomium.这仍然需要Eto.Forms或任何其他引导程序来启动应用程序,但所有其他导航将通过Awesomium呈现的html.

谢谢,伊夫

c# mono cross-platform eto electron

10
推荐指数
1
解决办法
6224
查看次数

标签 统计

eto ×2

.net ×1

c# ×1

cross-platform ×1

electron ×1

f# ×1

gtk3 ×1

mono ×1