[AX]AX2012在form上使用.net控件

在AX2012的form中可以使用.net的控件,这些控件包括windows form控件(System.Windows.Forms命名空间)、Windows presentation foundation的控件(System.Windows.Controls命名空间)以及从这些空间派生出来的类型或者UserControl类型。这些.net控件由AX的ManagedHost控件宿主,在添加一个.net控件到form时,一个ManagedHost也被添加。

添加.net控件到form可以是在设计时添加,也可以在运行时动态添加,无论哪种方式都需要添加相应程序集的引用。在AOT的References节点下右键菜单中“Add reference”可以选择要引用的程序集,也可以在AOT中form上new managedcontrol是选择添加引用程序集并选择相应的控件。这些程序集必须是强签名的,managedhost纪录程序集的名称、版本号语言及public token,由这些信息来唯一标识一个.net的程序集。

下面简单演示如何动态的添加一个Windows form的button控件到AX form上:

public void init()
{
    FormManagedHostControl managedHostControl;
    System.Windows.Controls.Button myButton;
    System.Exception laste;
    ;
    super();
    try
    {
        managedHostControl = this.design().addControl(FormControlType::ManagedHost, "ManagedButton");
        managedHostControl.assemblyName("PresentationFramework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
        managedHostControl.typeName("System.Windows.Controls.Button");
        managedHostControl.sizing(Sizing::SizeToContent);

        myButton = managedHostControl.control();
        myButton.set_ToolTip("Press button to view the current time");
        myButton.set_Content("Time");
        myButton.UpdateLayout();
        myButton.add_Click(new ManagedEventHandler(this, "MyButton_Click"));
    }
    catch (Exception::CLRError)
    {
        laste = CLRInterop::getLastException();
        throw error(laste.ToString());
    }
}

public void MyButton_Click(System.Object sender, System.EventArgs args)
{
    ;
    Box::info("The current time: " + time2Str(timeNow(),
        TimeSeparator::Colon, TimeFormat::AMPM), "Current Time");
}

运行的截图如下:

在form的init函数中创建一个managedHost控件,指定其程序集、控件的类型,再从managedHost.control()得到对button控件的引用,就可以使用set_xxxx、get_xxxx等方法来操作.net控件的属性了。.net控件可以响应事件,使用add_xxxx放了来添加事件句柄,form的方法不能直接添加为句柄函数,必须使用ManagedEventHandler来封装。总的来看用法比较简单,却给我们在AX中创建复杂的UI提供了方便。

更多信息参见MSDN:http://msdn.microsoft.com/EN-US/library/gg840966

posted @ 2012-08-17 13:14  断水流  阅读(700)  评论(0编辑  收藏  举报