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

标签 c# wpf winforms gtk eto

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

我的 GUI 的基本结构就是一个 FormContent 是一个 Drawable,因此我可以最大程度地灵活处理不符合 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 事件的订阅以查看是否存在冲突,但我没有收到任何响应。这是因为我将它直接附加到表格吗?有什么方法可以在不实际使用文本框的情况下捕获文本输入吗?

最佳答案

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

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

关于c# - 如何在 Eto 中捕获没有文本框的键盘输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28118982/

相关文章:

c# - 查找序号

c# - asp.net mvc 模型绑定(bind)不绑定(bind)集合

c# - Syncfusion 图表轨迹球风格

c# - Winforms 创建下拉样式面板

c# - 在同一解决方案中的 vdproj 预构建事件中更改 csproj 程序集信息中的产品名称

c# - 多个线程在一个 DataTable C# 中填充它们的结果

WPF:管理 ContentPresenter 中所有控件的边距

WPF 数据网格/数据表 : Large number of rows

c# - 在 LookUpEdit 中隐藏代理键

c# - 如何处理 C# 中的菜单项以传递值