最新消息:ww12345678 的部落格重装上线,希望大家继续支持。

[原创]Microsoft Dynamics AX 中的消息对话框和模态对话框

AX 2009 William 3559浏览 0评论

Microsoft Dynamics AX 中对消息对话框和模态对话框均有良好支持,但同传统意义上的程序开发平台有一些自己的特性,本博文试图探究这些异同,给出标准化的实现方法简化开发新手摸索新知识的路径。但本人水平有限难免挂一漏万,欢迎各位AXer同仁批评指正。

  • 消息对话框

Microsoft Dynamics AX 中的消息对话框封装在Box这个类中,该类对外提供了多个静态方法处理各种样式的消息对话框,下面举一些常用的消息对话框的例子演示如何使用Box类产生消息对话框。

1.消息提示对话框

static void ww_infoBox(Args _args)
{;
    Box::info("Hello Microsoft Dynamics AX.", "Title");
}

2.警告对话框

static void ww_warningBox(Args _args)
{;
    Box::warning("Hello Microsoft Dynamics AX.", "Title");
}

3.错误对话框

static void ww_stopBox(Args _args)
{;
    Box::stop("Hello Microsoft Dynamics AX.", "Title");
}

4.”不要再次提醒”对话框

static void ww_doNotTellMeAgainCheckBox(Args _args)
{;
    Box::infoOnce("Hello Microsoft Dynamics AX.","Title","helpURL","Owner");
}

用户一旦勾选”不要再次告诉我” 复选框,该对话框将不会再次出现,如果你想再次弹出该话框,需要:
1. 依次点击”工具->选项”菜单
2. 在弹出的”选项”对话框,单击”应用数据”按钮
3. 在弹出的”应用数据”对话框,切换到”所有应用数据”选项卡
4. 在”名称”列 搜索”BoxInfoOnce”
5. 删除名为”Owner”的数据行即可

5.Yes/No选择对话框

static void ww_OKCancelDialogBox(Args _args)
{
    DialogButton diagBut;
    ;

    diagBut = Box::yesNo("Hellow Microsoft Dynamics AX." ,diagBut,"Title");

    switch (diagBut)
    {
        case DialogButton::Yes :
            box::info("You selected the 'yes' button.");
            break;
        case DialogButton::No :
            box::info("You selected the 'no' button.");
            break;
    }
}

6.”是/全是/否/全否”选择对话框

static void ww_yesAllNoAllCancelBox(Args _args)
{
    DialogButton diagBut;
    ;

    diagBut = Box::yesAllNoAllCancel("Hellow Microsoft Dynamics AX." ,DialogButton::Yes,"Title");

    switch (diagBut)
    {
        case DialogButton::Cancel :
            box::info("You selected the 'Cancel' button.");
            break;
        case DialogButton::No :
            box::info("You selected the 'No' button.");
            break;
        case DialogButton::NoToAll:
            box::info("You selected the 'NoToAll' button.");
            break;
        case DialogButton::Yes :
            box::info("You selected the 'Yes' button.");
            break;
        case DialogButton::YesToAll:
            box::info("You selected the 'YesToAll' button.");
            break;
    }
}

更多关于Box类的信息请参阅MSND:http://msdn.microsoft.com/en-US/library/aa590624.aspx

  • 模态对话框

为了实现模态对话框,你需要事先在AOT->Form节点下进行设计,模态对话框的设计与普通窗体没有区别,只是需要特别设置窗体的几个属性,使得窗体在外观上符合模态对话框的视觉要素。

属性
Caption 模态对话框
Maximize No
Minimize No
Frame Dialog
WindowsResize Fixed
WindowsType Popup
HideToolbar Yes

另外,我们都知道Dynamics AX 窗体都有高级自定义的功能,也就是允许用户在窗体上通过单击鼠标右键的方式自定义窗体上控件的布局,用户可以通过该功能破坏模态对话框的运行模式,为了完美模拟模态对话框,我们需要重载模态对话框窗体所有控件的”ShowContentMenu”方法,阻止窗体右键上下文相关菜单的弹出。

public int showContextMenu(int _menuHandle)
{
    int ret;

    //ret = super(_menuHandle);

    return ret;
}

在调用窗体中使用下面代码即可将刚才设计的模态对话框以模态的方式运行:

void clicked()
{
    Args            args;
    FormRun         formCreate;
    ;
    args = new Args();
    args.name(FormStr("ww_ChildForm"));
    formCreate = classFactory.formRunClass(args);
    formCreate.init();
    formCreate.run();

    if (!formCreate.closed())
        formCreate.wait(true);

    if (formCreate.closedOk())
        info("You clicked 'OK' button.");
    else
       info("You clicked 'Cancle' button.");
}

运行后的模态对话框:

Demo AX 4.0 项目文件:

PrivateProject_WW12345678_ModalDialog

转载请注明:ww12345678 的部落格 | AX Helper » [原创]Microsoft Dynamics AX 中的消息对话框和模态对话框

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址