如何在没有文本框的情况下捕获键盘输入

时间:2015-01-23 21:26:24

标签: c# wpf winforms gtk eto

我有一个项目(Void)使用.NET和Mono的Eto GUI框架。我正在构建一个类似Vim的文本编辑器,它至少具有Vim所具有的一些模式(是的,我知道,one does not simply...)。

我的GUI的基本结构只是Form ContentDrawable,因此我对不符合常规GUI应用程序风格的内容具有最大的灵活性。当我删除普通模式并且KeyUp命令关闭窗口时,我已成功将ZQ处理程序附加到表单。

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

对于普通模式来说这很好,但是对于其他模式,例如命令模式和插入模式,我希望能够捕获特殊的键组合(即使用 CTRL 的键组合)但不是我只是想把东西当成文字。这将允许我处理Unicode等。换句话说,我不想简单地将键击转换回文本本身。

我尝试附加TextInput事件。

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

我甚至评论了我对KeyUp事件的订阅,看看是否存在冲突,但我只是没有得到任何回复。这是因为我将它直接附加到表单上吗?有没有办法在不实际使用文本框的情况下捕获文本输入?

1 个答案:

答案 0 :(得分:1)

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

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