go - 在多行 Fyne Entry 小部件中捕获 Enter (更一般地,调用 "parent classes")

标签 go subclassing fyne

这个问题更多是关于围棋而不是 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 子句无法编译。因此,在确定这不是我想要拦截的 Key 之后,我该如何将它还给 widget.Entry?这里关于调用“基类”的其他问题,Go 没有,似乎没有涵盖这种情况。

我想我可以通过添加来巧妙地解决这个问题
type myEntry struct {
    widget.Entry
    me *Fyne.Focusable

并在创建时将我设置为 myEntry 的地址,因此我可以简单地调用 me.TypedKey。但是没有处理 key ,然后发生了崩溃。在创建时设置 me=&myNewEntryObject 显然不足以“widget.Entry-like”赢得这一天。

我知道 Go 不是 OO 语言,但是扩展一个类型然后将调用重定向回父类型是一种基本的编程技术;我什至会说,如果您无法从扩展中恢复到“基本结构”的行为,那么扩展一个结构是没有意义的。我错过了什么?

最佳答案

可以使用类型的名称来引用没有名称的嵌入式类型 - 因此以下内容将起作用:

func (m *myEntry) TypedKey(key *fyne.KeyEvent) {
    if key.Name == "Return" {
            // send m.Text somewhere...
    } else {
        Entry.TypedKey(key)
    }
}

关于go - 在多行 Fyne Entry 小部件中捕获 Enter (更一般地,调用 "parent classes"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59752653/

相关文章:

go - golang 中的 trap os.Exit

python - 在Python中是否有一种正确的方法来实现具有与其父类(super class)不同的方法签名的子类?

iphone - 重写 three20 TTDefaultStyleSheet 样式不起作用

android - 如何在 android 上为原生 fyne 应用程序发出 http 请求

go - 如何从中间件记录响应主体?

macos - 在 MacOS 上的 golang 中使用带有 http.Get 的自签名 SSL

php - PHP 7.3.x 中单例子类化的已知错误?

go - 省略号扩展 fyne NewVBox

go - 有彩色背景的按钮

go - 这种类型别名语法是 n Go 吗?