在多行Fyne Entry小部件中捕获Enter(通常,称为“父类”)

时间:2020-01-15 13:42:09

标签: go subclassing fyne

这个问题更多的是关于Go的,而不是Fyne。扩展了Fyne的Entry小部件是规定的方式,我想检测何时按下Enter(返回),并将其用作我需要对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?这里关于Go所没有的有关调用“基类”的其他问题似乎并未涵盖这种情况。

我认为我可以通过添加

type myEntry struct {
    widget.Entry
    me *Fyne.Focusable

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

我知道Go不是一种OO语言,但是扩展一个类型然后将调用重定向回父类型是一种基本的编程技术。我要说的是,如果您无法从扩展名回到“基本结构”的行为,那么扩展结构毫无意义。我想念什么?

1 个答案:

答案 0 :(得分:1)

可以使用类型的名称来引用没有名称的嵌入式类型-这样可以正常工作:

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