我想捕获c#Gtk.SearchEntry元素中的tab键,这样tab不会导致元素失去焦点。我读到你可以通过在OnKeyPressEvent函数中返回false来做到这一点。但是,在覆盖SearchEntry小部件中的函数时,这不起作用。
如果我覆盖了Window的OnKeyPressEvent函数,但是整个窗口的tab键被阻止了,这不是很理想......这是我的SearchEntry类:
internal class NoTabSearchEntry : SearchEntry
{
protected override bool OnKeyPressEvent(EventKey evnt)
{
if (evnt.Key == Key.Tab)
{
Console.WriteLine("tab pressed");
return false;
}
return base.OnKeyPressEvent(evnt);
}
}
按下"标签"消息确实得到输出,但SearchEntry无论如何都会失去焦点。
答案 0 :(得分:1)
搞定了......您需要从按键事件信号的处理程序返回true
以防止默认处理。
其他一些问题。如果要捕获shift + tab,则需要检查ISO_Left_tab键
if (evnt.Key == Key.Tab || evnt.Key == Key.ISO_Left_Tab)
我还想捕捉上/下箭头键。出于某种原因,这些按键不会传递给OnKeyPressEvent
处理程序;但是,您可以通过添加KeyPressEvent
属性来拦截它们,如下所示:
...
myEntryElement.KeyPressEvent += MyHandler;
...
[GLib.ConnectBefore]
private void MyHandler(object o, KeyPressEventArgs args)
{
var evnt = args.Event;
if (evnt.Key == Key.Down || evnt.Key == Key.Up)
{
//do stuff
}
}