C# 如何在Eto中捕获没有文本框的键盘输入
我有一个项目()使用.NET和Mono的GUI框架。我正在构建一个类似Vim的文本编辑器,它将至少具有Vim所具有的一些模式(是的,我知道) 我的GUI的基本结构只是一个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(
内容
是一个可绘制的
,因此我可以最大限度地灵活处理一些不符合常规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
非常好--我很高兴看到这一点。