如何解决对话框面板在开关上无法正确隐藏-是否有解决方法?
我有一个对话框,其中包含两个面板,如下所示,它们是使用给定的代码创建的。如右图所示,第二个面板仍包含第一个面板中的内容。
是否有解决方法?
我觉得应该在Stackoverflow上提及此类错误。
class TestDialog : UIFrame{
TagGroup panel_list;
/**
* Switch to the `index`-th panel.
*/
void switchToPanel(object self,number index){
panel_list.DLGValue(index);
}
void switchToPanel0(object self){self.switchToPanel(0);}
void switchToPanel1(object self){self.switchToPanel(1);}
/**
* Create the dialog content
*/
TagGroup createContent(object self){
panel_list = DLGCreatePanelList(0);
TagGroup Box,switch_button,input,panel;
// panel 1
Box = DLGCreateBox("Panel 1");
// switch panel button
switch_button = DLGCreatePushButton("Switch to panel 2","switchToPanel1");
Box.DLGAddElement(switch_button);
// input field
input = DLGCreateStringField("ABC");
Box.DLGAddElement(input);
panel = DLGCreatePanel();
panel.DLGAddElement(Box);
panel_list.DLGAddElement(panel);
// panel 2
Box = DLGCreateBox("Panel 2");
// switch panel button
switch_button = DLGCreatePushButton("Switch to panel 1","switchToPanel0");
Box.DLGAddElement(switch_button);
// add a label so both Boxes have different heights
Box.DLGAddElement(DLGCreateLabel(""));
// input field
input = DLGCreateStringField("DEF");
Box.DLGAddElement(input);
panel = DLGCreatePanel();
panel.DLGAddElement(Box);
panel_list.DLGAddElement(panel);
TagGroup wrapper = DLGCreateGroup();
wrapper.DLGAddElement(panel_list);
return wrapper;
}
object init(object self){
return self.super.init(self.createContent())
}
}
alloc(TestDialog).init().pose()
解决方法
修复:手动隐藏
经过大量尝试,我认为手动触发UIFrame::SetElementIsShown()
可以解决此问题。在给定的示例中,可以将标识符input0
添加到第一个输入,将input1
添加到第二个输入,然后将TestDialog::switchToPanel()
函数更改为以下内容:
/**
* Switch to the `index`-th panel.
*/
void switchToPanel(object self,number index){
panel_list.DLGValue(index);
if(index == 0){
self.setElementIsShown("input0",1);
self.setElementIsShown("input1",0);
}
else{
self.setElementIsShown("input0",0);
self.setElementIsShown("input1",1);
}
}
完整的代码如下:
class TestDialog : UIFrame{
TagGroup panel_list;
/**
* Switch to the `index`-th panel.
*/
void switchToPanel(object self,number index){
panel_list.DLGValue(index);
if(index == 0){
self.setElementIsShown("input0",1);
self.setElementIsShown("input1",0);
}
else{
self.setElementIsShown("input0",0);
self.setElementIsShown("input1",1);
}
}
void switchToPanel0(object self){self.switchToPanel(0);}
void switchToPanel1(object self){self.switchToPanel(1);}
/**
* Create the dialog content
*/
TagGroup createContent(object self){
panel_list = DLGCreatePanelList(0);
TagGroup box,switch_button,input,panel;
// panel 1
box = DLGCreateBox("Panel 1");
// switch panel button
switch_button = DLGCreatePushButton("Switch to panel 2","switchToPanel1");
box.DLGAddElement(switch_button);
// input field
input = DLGCreateStringField("ABC");
input.DLGIdentifier("input0");
box.DLGAddElement(input);
panel = DLGCreatePanel();
panel.DLGAddElement(box);
panel_list.DLGAddElement(panel);
// panel 2
box = DLGCreateBox("Panel 2");
// switch panel button
switch_button = DLGCreatePushButton("Switch to panel 1","switchToPanel0");
box.DLGAddElement(switch_button);
// add a label so both boxes have different heights
box.DLGAddElement(DLGCreateLabel(""));
// input field
input = DLGCreateStringField("DEF");
input.DLGIdentifier("input1");
box.DLGAddElement(input);
panel = DLGCreatePanel();
panel.DLGAddElement(box);
panel_list.DLGAddElement(panel);
TagGroup wrapper = DLGCreateGroup();
wrapper.DLGAddElement(panel_list);
return wrapper;
}
object init(object self){
return self.super.init(self.createContent())
}
}
alloc(TestDialog).init().pose()
解决方法:使用标签页
我还发现选项卡使用完全相同的代码。因此,如果可能的话,只需将面板替换为标签即可。
class TestDialog : UIFrame{
TagGroup tab_list;
TagGroup inputs;
/**
* Create the dialog content
*/
TagGroup createContent(object self){
inputs = NewTagList();
tab_list = DLGCreateTabList(0);
TagGroup box,tab;
// panel 1
box = DLGCreateBox("Panel 1");
// input field
input = DLGCreateStringField("ABC");
box.DLGAddElement(input);
// save the input field in a TagList,this creates the problem
inputs.TagGroupInsertTagAsTagGroup(infinity(),input);
tab = DLGCreateTab("Tab 1");
tab.DLGAddElement(box);
tab_list.DLGAddElement(tab);
// panel 2
box = DLGCreateBox("Panel 2");
// add a label so both boxes have different heights
box.DLGAddElement(DLGCreateLabel(""));
// input field
input = DLGCreateStringField("DEF");
box.DLGAddElement(input);
inputs.TagGroupInsertTagAsTagGroup(infinity(),input);
tab = DLGCreateTab("Tab 2");
tab.DLGAddElement(box);
tab_list.DLGAddElement(tab);
TagGroup wrapper = DLGCreateGroup();
wrapper.DLGAddElement(tab_list);
return wrapper;
}
object init(object self){
return self.super.init(self.createContent())
}
}
object dialog = alloc(TestDialog).Init();
dialog.pose();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。