Drop down menu Digitalmicrograph DM脚本-更新其他对话框中的下拉项
我正在编写一个DM脚本,它创建了一种包含一些对话框的技术。 在这个脚本中,我试图从另一个对话框中更新一个对话框中的下拉菜单项 我现在在对话框中有一个按钮,下拉菜单名为“update”,它调用对话框类中的一个函数,这个函数名为“updateDialog”。 此函数用于删除所有下拉菜单项,然后插入标记列表中存储的所有项。 它还会更改该对话框中几个按钮的状态 此更新按钮工作正常 现在,如果我在另一个对话框中调用这个updateDialog函数,按钮状态会发生变化,但下拉菜单不会更新 有人知道为什么会发生这种情况和/或是否有办法做到这一点吗 谢谢 示例代码:Drop down menu Digitalmicrograph DM脚本-更新其他对话框中的下拉项,drop-down-menu,dialog,refresh,items,dm-script,Drop Down Menu,Dialog,Refresh,Items,Dm Script,我正在编写一个DM脚本,它创建了一种包含一些对话框的技术。 在这个脚本中,我试图从另一个对话框中更新一个对话框中的下拉菜单项 我现在在对话框中有一个按钮,下拉菜单名为“update”,它调用对话框类中的一个函数,这个函数名为“updateDialog”。 此函数用于删除所有下拉菜单项,然后插入标记列表中存储的所有项。 它还会更改该对话框中几个按钮的状态 此更新按钮工作正常 现在,如果我在另一个对话框中调用这个updateDialog函数,按钮状态会发生变化,但下拉菜单不会更新 有人知道为什么会发
taggroup menuitems = newtaglist()
object firstdialog, seconddialog
interface I_seconddialog{
void updatedropdowndialog(object self);
}
class firstdialog : uiframe{
void additemresponse (object self){
number items = menuitems.taggroupcounttags()+1
menuitems.taggroupinserttagasstring(infinity(), "Created item #"+items)
menuitems.taggroupopenbrowserwindow(0)
seconddialog.updatedropdowndialog()
}
taggroup createdialog (object self){
taggroup dialog, dialogitems, additembutton
dialog = DLGCreateDialog("first_dialog", dialogItems)
additembutton = DLGCreatePushButton("Add pulldown item", "additemresponse")
dialogitems.dlgaddelement(additembutton)
return dialog
}
object init (object self){
return self.super.init( self.createdialog() )
}
}
class seconddialog : uiframe{
number isbuttonenabled
void updatedropdowndialog (object self){
// Change the state of the state button to show that that does work
isbuttonenabled = abs(isbuttonenabled-1)
self.Setelementisenabled("statebutton",isbuttonenabled);
// Empty the dropdown as the menuitems list might be completely different
taggroup dropdown = self.lookupelement("dropdown")
taggroup dropdown_items
dropdown.taggroupgettagastaggroup("Items",dropdown_items)
dropdown_items.taggroupdeletealltags()
// Add the current tags in menuitems to the dropdown
for(number i=0;i<menuitems.taggroupcounttags();i++){
string item_name
menuitems.taggroupgetindexedtagasstring(i,item_name)
dropdown.dlgaddchoiceitementry(item_name)
}
}
taggroup createdialog (object self){
taggroup dialog, dialogitems, dropdown, updatebutton, statebutton
dialog = DLGCreateDialog("second_dialog", dialogItems)
taggroup initial_items
dropdown = DLGCreateChoice(initial_items,0,"dropdownchange").dlgidentifier("dropdown")
dropdown.dlgaddchoiceitementry("Initial item")
updatebutton = DLGCreatePushButton("Update dropdown", "updatedropdowndialog")
statebutton = DLGCreatePushButton("state changes", "stateresponse").dlgidentifier("statebutton")
dialogitems.dlgaddelement(dropdown)
dialogitems.dlgaddelement(updatebutton)
dialogitems.dlgaddelement(statebutton)
return dialog
}
object init (object self){
isbuttonenabled = 1
return self.super.init( self.createdialog() )
}
}
void main(){
String techniqueName = "Example"
Image techniqueIcon := RGBImage( "Test icon", 4, 75, 75 )
techniqueIcon = RGB( icol, irow, iradius )
object technique = CreateTechnique( techniqueName, techniqueIcon )
firstdialog = Alloc( firstdialog ).Init()
String taskName = "First dialog"
Number taskID = RegisterWorkflowTask( firstdialog, taskName )
Number bOpenByDefault = 1
Number bEssential = 0
AddWorkflowTask( technique, taskID, bEssential, bOpenByDefault )
seconddialog = Alloc( seconddialog ).Init()
taskName = "Second dialog"
taskID = RegisterWorkflowTask( seconddialog, taskName )
bOpenByDefault = 1
bEssential = 0
AddWorkflowTask( technique, taskID, bEssential, bOpenByDefault )
AddCustomTechnique( technique )
}
main()
taggroup menuitems=newtaglist()
对象第一个对话框,第二个对话框
接口I_第二个对话框{
void updatedropdowndialog(对象自身);
}
类firstdialog:uiframe{
void additemresponse(对象自身){
number items=menuitems.taggroupcounttags()+1
menuitems.tagGroupInsertTagaString(无穷大(),“已创建项#”+项)
menuitems.taggroupopenbrowserwindow(0)
seconddialog.updatedropdowndialog()
}
标记组创建对话框(对象自身){
标记组对话框、dialogitems、additembutton
dialog=DLGCreateDialog(“第一个对话”,dialogItems)
additembutton=DLGCreateButton(“添加下拉项”、“additemresponse”)
dialogitems.dlgaddelement(additembutton)
返回对话框
}
对象初始化(对象自身){
返回self.super.init(self.createdialog())
}
}
类第二个对话框:uiframe{
数字按钮已启用
void updatedropdowndialog(对象自身){
//更改“状态”按钮的状态以显示该按钮是否有效
isbuttonenabled=abs(isbuttonenabled-1)
self.Setelementisenabled(“statebutton”,isbuttonenabled);
//清空下拉列表,因为菜单项列表可能完全不同
标记组下拉列表=self.lookupelement(“下拉列表”)
标记组下拉列表\u项
TagGroupGetTagStagGroup(“项目”,下拉菜单项)
下拉菜单\u items.taggroupdeletealltags()
//将菜单项中的当前标记添加到下拉列表中
对于(数字i=0;i不是答案(尚未),而是更长的澄清注释
我正在GMS 3.4.2上测试您的脚本代码,这是我看到的行为,在GMS启动后立即运行脚本(一次):
添加了自定义技术:
它最初显示两个对话框:
按第二个对话框上的“更新下拉列表”切换“状态”
更改“按钮启用/禁用:
按第一个对话框上的“添加下拉项”按钮
时间添加到下拉列表中,并在中切换“状态更改”按钮
第二个对话框(并显示条目标记列表):
这不正是你想要的行为吗?请在你的问题中提供一个精简的代码,显示你所描述的内容,并可以作为回答文章的基础。理想情况下,这是一个独立的代码部分,你可以直接添加到你的问题文章中(使用编辑).Hi Bmyguest,我很快编写了一些代码来说明这个问题。如果单击“添加”下拉列表项,它将触发updatedropdowndialog函数。它应该更新下拉列表并切换按钮的状态,但它只切换状态。如果在第二个对话框中单击“更新”下拉列表按钮,它将触发相同的函数,但我t正常工作。我可以确认这个问题。在文档中,它是针对DLGInvalid
方法的:“为修改的元素设置'Invalid'属性。用于对话框显示的运行时更新”。我与UIFrame::validateView()一起尝试了它
但它不起作用。请注意,所有的UIFrame
方法在直接处理对话框对象时都起作用。我记得我也遇到过这个问题,但我找不到解决问题的地方和方法。哦,这可能只是一个bug,目前已经修复。我已经在GMS 3.4.0上测试了你的脚本,一个d下拉列表没有更新。@Merijn如果这不是在线系统(安装有硬件),我绝对建议更新到3.4版本-它有很多新功能。3.4.2是当前可用的最新版本,但您也可以选择限量版3.4.1“Covid”如果您对访问量化等非免费功能感兴趣。