这个问题更多的是关于Go而不是Fyne。扩展 Fyne 的条目小部件是规定的方式,我想检测何时按下 Enter(返回(并将其用作我需要对条目内容采取行动的信号。我希望 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 子句无法编译。因此,在确定这不是我想要拦截的密钥之后,我该如何将其返回给小部件。进入?这里关于调用"基类"的其他问题,Go 并不完全有,似乎没有涵盖这种情况。
我想我可以通过添加来巧妙地解决这个问题
type myEntry struct {
widget.Entry
me *Fyne.Focusable
并在创建时将我设置为myEntry的地址,这样我就可以简单地打电话给我。键入的密钥。但是钥匙没有处理,然后发生了崩溃。在创建时设置 me=&myNewEntryObject 显然不够"小部件"。入口式"赢得这一天。
我知道 Go 不是一种面向对象语言,但扩展一个类型,然后将调用重定向回父类型是一种基本的编程技术;我甚至会说,如果您无法从扩展中返回到"基本结构"的行为,那么扩展结构是没有意义的。我错过了什么?
没有名称的嵌入类型可以使用类型名称引用 - 因此以下内容将起作用:
func (m *myEntry) TypedKey(key *fyne.KeyEvent) {
if key.Name == "Return" {
// send m.Text somewhere...
} else {
Entry.TypedKey(key)
}
}