Этот вопрос больше о Go, чем о Файне. Расширив виджет «Запись» в 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 при создании, чтобы я мог просто позвонить мне. TypedKey. Но ключи не были обработаны, и тогда произошел взлом sh. Установка me = & myNewEntryObject при создании, по-видимому, недостаточно "widget.Entry-like", чтобы выиграть день.
Я знаю, Go не является языком OO, но расширяет тип и затем перенаправляет обратные вызовы. для родительского типа это фундаментальная методика программирования; Я бы go сказал, что нет смысла расширять структуру, если вы не можете вернуться к поведению "базовой структуры" из расширения. Чего мне не хватает?