這個問題更多是關于圍棋而不是 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 語言,但是擴展一個類型然后將調用重定向回父類型是一種基本的編程技術;我什至會說,如果您無法從擴展中恢復到“基本結構”的行為,那么擴展一個結構是沒有意義的。我錯過了什么?
1 回答

慕容708150
TA貢獻1831條經驗 獲得超4個贊
可以使用類型的名稱來引用沒有名稱的嵌入式類型 - 因此以下內容將起作用:
func (m *myEntry) TypedKey(key *fyne.KeyEvent) {
if key.Name == "Return" {
// send m.Text somewhere...
} else {
Entry.TypedKey(key)
}
}
- 1 回答
- 0 關注
- 296 瀏覽
添加回答
舉報
0/150
提交
取消