如何在 dm 脚本中使用对话框单选按钮的更改方法

How do I use the changed method of a dialog radiobutton in dm script

dm脚本中单选按钮chanded方法回调如何使用?


以下代码是文档提供的示例代码,扩展了两个单选按钮。生成的对话框如下所示。

单击 按钮 效果非常好。 结果 选项卡显示 "button callback"。但是当更改单选按钮时没有任何反应。单击 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();

单选按钮更改方法的回调需要 TagGroup 作为第二个参数:

void radioButtonChanged(object self, TagGroup radio_list)

因此,将上面代码中的 radioCallback() 函数更改为具有这两个参数的示例工作正常(下面提供的代码)。

请注意,这使得获取单选按钮的选定值变得容易,因为 radio_list 包含 "Value" 索引中的值:

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();