go - 在多行 Fyne Entry 小部件中捕获 Enter(更一般地,调用“父类”)
问题描述
这个问题更多是关于围棋而不是 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。但是没有处理钥匙,然后发生了崩溃。在创建时设置 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)
}
}
推荐阅读
- python - 在 django 项目中使用 manage.py shell 是否合理?我正在创建一个博客应用程序
- javascript - 如何创建多个动态下拉列表,从同一个数组中获取值,而无需更改 Javascript 中的其他值
- flutter - Flutter - FAILURE:构建失败并出现异常
- php - WC()->cart->add_to_cart 问题在这里?
- swift - SwiftUI 限制更改 TabView 视图的拖动手势
- eloquent - 雄辩:如何处理条件关系
- reactjs - 连接商店和本地 IProps
- javascript - React js-点击链接后如何防止页面重新加载。现在整个页面都在点击链接刷新
- javascript - 我的 add 函数没有给出任何错误,它也不起作用
- javascript - Angular:如果当前浏览器是 Internet Explorer,如何重定向到静态的 unsupported.html 页面?