GTK#输入框禁用选项卡移动焦点

时间:2018-05-07 09:01:43

标签: c# gtk gtk#

我想捕获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无论如何都会失去焦点。

1 个答案:

答案 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
    }
}