GTK# 输入框禁用选项卡移动焦点
GTK# Entry box disable tab moving focus
我想捕获 c# Gtk.SearchEntry 元素中的制表键,这样制表符就不会导致元素失去焦点。我读到你可以通过在 OnKeyPressEvent 函数中返回 false 来做到这一点。但是,这在覆盖 SearchEntry 小部件中的函数时不起作用。
如果我重写 Window 的 OnKeyPressEvent 函数,这确实有效,但是 Tab 键在整个 window 中被阻止,这并不理想...这是我的 SearchEntry class:
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);
}
}
"tab pressed" 消息确实得到输出,但 SearchEntry 无论如何都会失去焦点。
知道了...您需要 return true
来自按键事件信号的处理程序以防止默认处理。
其他几个问题。如果您想捕获 shift + tab 键,则需要检查 ISO_Left_tab 键
if (evnt.Key == Key.Tab || evnt.Key == Key.ISO_Left_Tab)
我还想捕获 up/down 方向键。由于某些原因,这些按键没有传递给 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
}
}
我想捕获 c# Gtk.SearchEntry 元素中的制表键,这样制表符就不会导致元素失去焦点。我读到你可以通过在 OnKeyPressEvent 函数中返回 false 来做到这一点。但是,这在覆盖 SearchEntry 小部件中的函数时不起作用。
如果我重写 Window 的 OnKeyPressEvent 函数,这确实有效,但是 Tab 键在整个 window 中被阻止,这并不理想...这是我的 SearchEntry class:
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);
}
}
"tab pressed" 消息确实得到输出,但 SearchEntry 无论如何都会失去焦点。
知道了...您需要 return true
来自按键事件信号的处理程序以防止默认处理。
其他几个问题。如果您想捕获 shift + tab 键,则需要检查 ISO_Left_tab 键
if (evnt.Key == Key.Tab || evnt.Key == Key.ISO_Left_Tab)
我还想捕获 up/down 方向键。由于某些原因,这些按键没有传递给 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
}
}