GTK # Окно ввода отключить перемещение вкладки фокуса - PullRequest
0 голосов
/ 07 мая 2018

Я хочу захватить клавишу tab в элементе c # Gtk.SearchEntry, чтобы вкладка не приводила к потере фокуса элемента. Я прочитал, что вы можете сделать это, возвращая false в функции OnKeyPressEvent. Однако это не работает при переопределении функции в виджете SearchEntry.

Это работает, если я переопределяю функцию OnKeyPressEvent окна, но тогда клавиша табуляции блокируется для всего окна, что не идеально ... Вот мой класс 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 голосов
/ 07 мая 2018

Понятно ... Вам нужно вернуть 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
    }
}
...