为什么按返回键不会触发我的Gtk.Entry中的KeyPressEvent?

时间:2009-11-09 00:05:33

标签: c# gtk gtk#

我有这样的代码:

    ...

    entry.KeyPressEvent += EntryKeyPressEvent;

    ...
}

void EntryKeyPressEvent(object o, KeyPressEventArgs args)
{
    Console.WriteLine("DEBUG: KeyValue: " + args.Event.KeyValue);
    ...
}

按下大多数键时调用EntryKeyPressEvent,但不返回返回键。这是为什么?

编辑:当按下大多数键时,实际上没有调用它。有些人称之为(例如,向上,向下,逃跑),但大多数人没有(例如任何字母键,返回)。

作为参考,我正在尝试移植看起来像这样的PyGTK代码:

    ...

    entry.connect('key_press_event', self.entry_key_pressed)

    ...

def entry_key_pressed(self, widget, event):
    ...

3 个答案:

答案 0 :(得分:3)

我能够从this mailing list thread找到它。我所要做的就是将ConnectBefore属性应用于处理程序方法:

[ConnectBefore]
void EntryKeyPressEvent(object o, KeyPressEventArgs args)
{
    Console.WriteLine("DEBUG: KeyValue: " + args.Event.KeyValue);
    ...
}

答案 1 :(得分:2)

来自PyGTK常见问题解答:

  

键盘事件的处理方式不同。当您的窗口收到键盘事件时,它首先被调度到顶层窗口,该窗口将检查它是否与任何键盘快捷键匹配。如果按键与快捷键不匹配,则会将事件分派给当前具有焦点的子窗口小部件。

简而言之:您的Gtk.Entry没有看到按键事件信号,因为顶级窗口正在使用它(即激活当前选定的小部件)。

一个元回答:通常,搜索其他语言的GTK文档非常有用。

答案 2 :(得分:0)

您是否尝试验证输入?焦点离开输入框时会引发焦点输出事件 - 就像用户点击Enter键一样。