Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Eto中捕获没有文本框的键盘输入_C#_Wpf_Winforms_Gtk_Eto - Fatal编程技术网

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

C# 如何在Eto中捕获没有文本框的键盘输入,c#,wpf,winforms,gtk,eto,C#,Wpf,Winforms,Gtk,Eto,我有一个项目()使用.NET和Mono的GUI框架。我正在构建一个类似Vim的文本编辑器,它将至少具有Vim所具有的一些模式(是的,我知道) 我的GUI的基本结构只是一个内容是一个可绘制的,因此我可以最大限度地灵活处理一些不符合常规GUI应用风格的东西。当我退出正常模式并使用ZQ命令关闭窗口时,我已成功地将KeyUp处理程序附加到表单 KeyUp += (sender, eventArgs) => { var keyPress = eventArgs.AsVoidKeyPress(

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

我的GUI的基本结构只是一个
内容
是一个
可绘制的
,因此我可以最大限度地灵活处理一些不符合常规GUI应用风格的东西。当我退出正常模式并使用
ZQ
命令关闭窗口时,我已成功地将
KeyUp
处理程序附加到表单

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
事件的订阅,看看这是否有冲突,但我没有得到任何回应。这是因为我将它直接附加到表单上吗?有没有办法在不使用文本框的情况下捕获文本输入?

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

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

非常好--我很高兴看到这一点。