Как использовать метод chanded диалогового переключателя в dm скрипте - PullRequest
1 голос
/ 16 апреля 2020

Как использовать переключаемый метод обратного вызова метода в сценарии dm?


Следующий код является примером кода, предоставленного документацией, дополненной двумя переключателями. Результирующее диалоговое окно показано ниже.

Test Dialog

Нажатие кнопки работает отлично. На вкладке Results отображается «обратный вызов кнопки». Но при смене кнопок радио ничего не происходит. После нажатия OK я получаю сообщение об ошибке (столько раз, сколько я менял переключатели), что данный метод не существует.

Как использовать обратный вызов переключателя?

class testDialog : UIFrame{
    void buttonCallback(object self){
        result("button callback\n");
    }

    void radioCallback(object self){
        result("radio callback\n");
    }
}

TagGroup dialog_items;
TagGroup dialog_tags = DLGCreateDialog("Test Dialog", dialog_items);

TagGroup button_tag = DLGCreatePushButton("Button", "buttonCallback");
dialog_items.DLGAddElement(button_tag);

TagGroup radio_list = DLGCreateRadioList(0, "radioCallback");
radio_list.DLGAddRadioItem("Radio 1", 0);
radio_list.DLGAddRadioItem("Radio 2", 1);
dialog_items.DLGAddElement(radio_list);

Object dialog = alloc(testDialog).init(dialog_tags);

dialog.Pose();

1 Ответ

1 голос
/ 16 апреля 2020

Обратному вызову для метода изменения переключателя требуется TagGroup в качестве второго аргумента:

void radioButtonChanged(object self, TagGroup radio_list)

Так что изменение функции radioCallback() в приведенном выше коде для получения этих двух параметров в примере работает нормально ( приведенный ниже код).

Обратите внимание, что это позволяет легко получить выбранное значение переключателей, поскольку radio_list содержит значение в индексе «Значение»:

void radioCallback(object self, TagGroup radio_list){
    number value;
    radio_list.TagGroupGetTagAsNumber("Value", value);

    result("radio callback, radio list has value " + value + "\n");
}


Полный рабочий пример кода в вопросе следующий:

class testDialog : UIFrame{
    void buttonCallback(object self){
        result("button callback\n");
    }

    void radioCallback(object self, TagGroup radio_list){
        result("radio callback\n");
    }
}

TagGroup dialog_items;
TagGroup dialog_tags = DLGCreateDialog("Test Dialog", dialog_items);

TagGroup button_tag = DLGCreatePushButton("Button", "buttonCallback");
dialog_items.DLGAddElement(button_tag);

TagGroup radio_list = DLGCreateRadioList(0, "radioCallback");
radio_list.DLGAddRadioItem("Radio 1", 0);
radio_list.DLGAddRadioItem("Radio 2", 1);
dialog_items.DLGAddElement(radio_list);

Object dialog = alloc(testDialog).init(dialog_tags);

dialog.Pose();
...