Function DOORS DXL:无法操作全局按钮//切换控制活动/非活动

Function DOORS DXL:无法操作全局按钮//切换控制活动/非活动,function,ibm-doors,Function,Ibm Doors,好的,我找到了关于如何使用DXL启用/禁用(活动/非活动)控件的有用答案,但是现在我觉得我有一个我不理解的问题,不知怎么的,与函数的加载顺序有关 问题:当我创建一个对话框时,我有两个按钮,其中一个按钮在创建后不久处于非活动状态。当我按下按钮1时,我想强制按钮2激活,但相反,我得到一个错误,说明按钮2未分配,这很奇怪,因为它是全局声明的,并在主函数中设置的。那么,我做错了什么 这是我的密码 pragma runLim,10000 DB main_dialog = null DBE main_bu

好的,我找到了关于如何使用DXL启用/禁用(活动/非活动)控件的有用答案,但是现在我觉得我有一个我不理解的问题,不知怎么的,与函数的加载顺序有关

问题:当我创建一个对话框时,我有两个按钮,其中一个按钮在创建后不久处于非活动状态。当我按下按钮1时,我想强制按钮2激活,但相反,我得到一个错误,说明按钮2未分配,这很奇怪,因为它是全局声明的,并在主函数中设置的。那么,我做错了什么

这是我的密码

pragma runLim,10000

DB main_dialog = null
DBE main_button1 = null
DBE main_button2 = null

void toggle_visibility_other_button(DBE dbe)
{
    active(main_button2)
}

void do_something(DBE dbe)
{
    infoBox "UNDER CONSTRUCTION"
}

void main_function()
{   
    main_dialog = create("My GUI", styleCentered)
    main_button1 = button(main_dialog, "Button 1", toggle_visibility_other_button)
    main_button2 = button(main_dialog, "Button 2", do_something)

    inactive(main_button2)

    realize(main_dialog)
    setSize(main_dialog, 300, 150)
}

main_function
好的

这是一个非常简单的问题,但我将花一秒钟来解释发生了什么

在DOORS中,有两种方法可以完成对话框并将其显示给用户:

show(DB box)

第一个显示对话框,但DOORS界面的其余部分仍然是“活动”的。“显示”后不会执行任何代码-所有内容都必须在对话框中内置的回调中执行

第二个对话框显示对话框,但冻结DOORS界面的其余部分,直到对话框关闭或调用释放功能。关闭对话框后,DXL程序将继续

现在,在您的程序中,您使用了“实现”命令。这主要用于配置对话框的视觉效果,但实际上并没有正确设置按钮和子功能。然后,您的setSize出现了,并将对话框设置为显示,但您仍然需要显示-请参见下面的内容

//Show example
pragma runLim,10000

DB main_dialog = null
DBE main_button1 = null
DBE main_button2 = null

void toggle_visibility_other_button(DBE dbe)
{
    active(main_button2)
}

void do_something(DBE dbe)
{
    infoBox "UNDER CONSTRUCTION"
}

void main_function()
{   
    main_dialog = create("My GUI", styleCentered)
    main_button1 = button(main_dialog, "Button 1", toggle_visibility_other_button)
    main_button2 = button(main_dialog, "Button 2", do_something)

    inactive(main_button2)

    realize(main_dialog)
    setSize(main_dialog, 300, 150)
    // Added This
    show(main_dialog)
    print "Ran it!"
}

main_function
块示例:

//block example
pragma runLim,10000

DB main_dialog = null
DBE main_button1 = null
DBE main_button2 = null

void toggle_visibility_other_button(DBE dbe)
{
    active(main_button2)
}

void do_something(DBE dbe)
{
    infoBox "UNDER CONSTRUCTION"
}

void main_function()
{   
    main_dialog = create("My GUI", styleCentered)
    main_button1 = button(main_dialog, "Button 1", toggle_visibility_other_button)
    main_button2 = button(main_dialog, "Button 2", do_something)

    inactive(main_button2)

    realize(main_dialog)
    setSize(main_dialog, 300, 150)
    // Added This
    block(main_dialog)
    print "Ran it!"
}

main_function
有些DOORS函数要求您完成realize()以配置对话框元素(在调用show()或block()之前)-例如向listview DBE添加列。我不确定我在任何地方都见过这样的情况


让我知道这是否有帮助

嘿@TheKirkwoods,如果你觉得Russel已经回答了这个问题,你可以将其标记为已接受。这让其他人知道它解决了问题,同样,知道它是否起作用也很有用,这样我们可以尝试提供更多帮助
//block example
pragma runLim,10000

DB main_dialog = null
DBE main_button1 = null
DBE main_button2 = null

void toggle_visibility_other_button(DBE dbe)
{
    active(main_button2)
}

void do_something(DBE dbe)
{
    infoBox "UNDER CONSTRUCTION"
}

void main_function()
{   
    main_dialog = create("My GUI", styleCentered)
    main_button1 = button(main_dialog, "Button 1", toggle_visibility_other_button)
    main_button2 = button(main_dialog, "Button 2", do_something)

    inactive(main_button2)

    realize(main_dialog)
    setSize(main_dialog, 300, 150)
    // Added This
    block(main_dialog)
    print "Ran it!"
}

main_function