在多行 Fyne Entry 小部件中捕获 Enter(更一般地说,调用 "parent classes")
catching Enter in a multiline Fyne Entry widget (more generally, calling "parent classes")
这个问题更多的是关于 Go 而不是 Fyne。扩展 Fyne 的 Entry 小部件是规定的方式,我想检测何时按下 Enter (Return) 并将其用作我需要对 Entry 的内容采取行动的信号。我希望 Shift-Return 在文本中添加一个换行符而不提示我需要采取行动。
给定一个以
开头的结构
type myEntry struct {
widget.Entry
.....more... }
很容易添加
func (m *myEntry) TypedKey(key *fyne.KeyEvent) {
if key.Name == "Return" {
///send m.Text somewhere...
} else {
//WRONG: m.(*widget.Entry).TypedKey(key) //give Key to Entry widget to process
}
}
但 else 子句无法编译。所以在确定这不是我想要拦截的密钥之后,我该如何将它还给 widget.Entry?这里关于调用 "base classes" 的其他问题似乎没有涵盖这种情况。
我想我可以通过添加
来巧妙地解决这个问题
type myEntry struct {
widget.Entry
me *Fyne.Focusable
并在创建时将我设置为 myEntry 的地址,这样我就可以简单地调用 me.TypedKey。但是key没有处理好,然后就崩溃了。在创建时设置 me=&myNewEntryObject 显然不足以 "widget.Entry-like" 赢得胜利。
我知道 Go 不是面向对象的语言,但是扩展类型然后将调用重定向回父类型是一项基本的编程技术;我什至会说,如果您不能从扩展中恢复到 "base struct's" 行为,那么扩展结构就毫无意义。我错过了什么?
可以使用类型的名称来引用没有名称的嵌入式类型 - 因此以下内容将起作用:
func (m *myEntry) TypedKey(key *fyne.KeyEvent) {
if key.Name == "Return" {
// send m.Text somewhere...
} else {
Entry.TypedKey(key)
}
}
这个问题更多的是关于 Go 而不是 Fyne。扩展 Fyne 的 Entry 小部件是规定的方式,我想检测何时按下 Enter (Return) 并将其用作我需要对 Entry 的内容采取行动的信号。我希望 Shift-Return 在文本中添加一个换行符而不提示我需要采取行动。
给定一个以
开头的结构type myEntry struct {
widget.Entry
.....more... }
很容易添加
func (m *myEntry) TypedKey(key *fyne.KeyEvent) {
if key.Name == "Return" {
///send m.Text somewhere...
} else {
//WRONG: m.(*widget.Entry).TypedKey(key) //give Key to Entry widget to process
}
}
但 else 子句无法编译。所以在确定这不是我想要拦截的密钥之后,我该如何将它还给 widget.Entry?这里关于调用 "base classes" 的其他问题似乎没有涵盖这种情况。
我想我可以通过添加
来巧妙地解决这个问题type myEntry struct {
widget.Entry
me *Fyne.Focusable
并在创建时将我设置为 myEntry 的地址,这样我就可以简单地调用 me.TypedKey。但是key没有处理好,然后就崩溃了。在创建时设置 me=&myNewEntryObject 显然不足以 "widget.Entry-like" 赢得胜利。
我知道 Go 不是面向对象的语言,但是扩展类型然后将调用重定向回父类型是一项基本的编程技术;我什至会说,如果您不能从扩展中恢复到 "base struct's" 行为,那么扩展结构就毫无意义。我错过了什么?
可以使用类型的名称来引用没有名称的嵌入式类型 - 因此以下内容将起作用:
func (m *myEntry) TypedKey(key *fyne.KeyEvent) {
if key.Name == "Return" {
// send m.Text somewhere...
} else {
Entry.TypedKey(key)
}
}