如何在 Eto 中捕获没有文本框的键盘输入

How to capture keyboard input without a text box in Eto

我有一个项目(Void) using the Eto GUI framework for .NET and Mono. I am building a Vim-like text editor which will have at least some of the modes which Vim has (and yes, I know, one does not simply...)。

我的 GUI 的基本结构只是一个 Form,它的 Content 是一个 Drawable,所以我对不符合常规样式的东西有最大的灵活性GUI 应用程序。当我停止正常模式时,我已经成功地将 KeyUp 处理程序附加到表单,并且我有 ZQ 命令关闭 window.

KeyUp += (sender, eventArgs) =>
{
    var keyPress = eventArgs.AsVoidKeyPress();
    if (keyPress != null)
    {
        handler(keyPress);
    }
};

这对于普通模式来说很好,但对于其他模式,例如命令模式和插入模式,我希望能够捕捉特殊的组合键(即使用 CTRL[=32= 的组合) ]) 但除此之外,我只想将内容捕获为文本。这将使我能够处理 Unicode 等。换句话说,我不只是想自己将击键转换回文本。

我试图附加一个 TextInput 事件。

Console.WriteLine("I see this, but...");
TextInput += (sender, eventArgs) =>
{
    Console.WriteLine("...I don't see this, no matter what I type.");
};

我什至注释掉了我对 KeyUp 事件的订阅,看看是否有冲突,但我没有收到任何回复。这是因为我将它直接附加到表格吗?有什么方法可以在不实际使用文本框的情况下捕获文本输入吗?

TextInput 事件已在开发分支(即将发布的 2.1 版本)中完全实现,您可以通过 myget 提要使用它。这应该捕获来自 Drawable 和其他控件(如 TextBox 等)的文本输入。它用于实现新的 MaskedTextBox,它只是 TextBox 的子类。

它不应与 KeyDown/KeyUp 事件冲突,除非您将事件参数的 Handled 属性 设置为 true