перехватывать Enter в многострочном виджете Fyne Entry (в более общем смысле, вызывая «родительские классы») - PullRequest
0 голосов
/ 15 января 2020

Этот вопрос больше о 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 сказал, что нет смысла расширять структуру, если вы не можете вернуться к поведению "базовой структуры" из расширения. Чего мне не хватает?

1 Ответ

1 голос
/ 15 января 2020

На встроенные типы без имени можно ссылаться, используя имя типа, поэтому будет работать следующее:

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