1

我正在尝试使用 Mono 在 Mac 上运行 .net 2 Windows.Forms 应用程序。该应用程序具有用于所有功能的组合键快捷方式,这些快捷方式具有预定义的默认值,并且可以由用户重新配置。Form KeyDown 事件处理程序查找要执行的操作。

我的问题是将修饰符和 KeyCode 与按下的实际键相关联。我不介意是否需要为 Mac 添加一些映射,但我至少需要 3 个修饰键。然而,在 Mac 上的 4 个修饰符中,似乎很少能产生明显的结果。我得到: Shift - 按预期工作 Ctrl - 报告不同的 KeyCode,但具有正确的修饰符(例如 Ctrl+N 具有 Modifiers = Control 和 KeyCode 14 = "RButton, Clear")。
Alt - 报告其他未修改的键(例如 Alt+R 给出 KeyCode = 168 = "BrowserRefresh") Cmd - 报告为 Alt 并带有预期的 KeyCode(例如 Cmd+N 显示为 Alt-N)

我认为 Cmd 键通常用于在 Windows 上使用 Ctrl 的地方。谁能建议我应该尝试使用三个 Mac 键中的哪一个?最重要的是如何解析 KeyEventArgs 以一致地报告一个基本键和三个可选修饰符?

Mono 是最新版本(截至一两周前),它是 MacBook Air、OS X 10.8.1,如果这有什么不同的话。

4

2 回答 2

1

我遇到同样的问题。尝试使用 IRC 并在 irc.gnome.org 上的 Mono 和 MonoMac 房间询问。非常有帮助的人。

显然是MonoMac,它可以让你在 Interface Builder 中构建一个原生 UI 并帮助你存根后端 C# 代码来与之对话(也就是说,MonoMac 是 Mono 与原生 Mac 对话,而不是在 Mac 上运行的Mono ;第二个很简单Mono),Windows.Forms 支持已被搁置——有人告诉我 Windows.Forms 在 Mac 上基本上是“死的”,而安静的bugzilla 页面似乎支持这一点。它真的很麻烦。我遇到了 SelectionBackColor 不能立即在 RichTextBox 中工作,然后菜单加速器不能可靠地工作。我认为 Mac 上的 Windows.Forms 质量从 alpha 到 beta。

也就是说,对于本质上是一种爱的劳动,数量惊人的 Windows.Forms 运行良好,但我不会将它用于完善的应用程序。祝你好运。

编辑: 我意识到 OP 并没有专门谈论菜单项,但这里有一个关于加速器和菜单项效果不佳的错误报告,只是为了谈谈相关的错误。

[Mono-bugs] [Bug 75996][Maj] 新 - menuitem 事件不是由快捷方式触发

Mono 上的 Windows.Forms 非常接近工作,很容易认为它会支持您需要完成的工作,但是,imo,认为它足够可靠,可以在制作快速实用程序之外使用将是错误的。

于 2012-09-15T03:01:53.467 回答
1

如果它对任何人都有用,这就是我最终的结果:我最终设法通过创建一个新的 KeyData 值来替换事件提供的值来绕过这个特定的“功能”(此代码仅在它是 Mac 时运行)。我交换了一些修饰符以使其与窗口更加一致(即,如果按下 Cmd,并由 Mono 报告为 Alt,我将其更改为 Ctrl)。我还过滤掉了 ctrl+A 到 ctrl+Z,它返回 KeyCodes 0 到 25(不是 65 到 90),并将它们替换为它们的正常值。幸运的是,我的代码只需要 KeyData。不可能使用更新的数据创建新的 KeyEventArgs,因为除了传递给 KeyEventArgs 构造函数的任何修饰符之外,Mono 还会检查当前键盘状态并为任何按下的修饰键设置修饰符标志。

BUT - as ruffin commented Mono on the Mac is very flaky. We've parked this work for the moment as it's taking quite a bit of time to work around all the problems. So far we've managed to find a solution for each item we've looked at, and may well come back to this - but at best it will be a nasty hack to get this S/W running on the Mac.

于 2012-09-24T11:53:15.140 回答