发在秋毫上了,复制一下吧

x++中的窗体不能继承,也没有所谓的自定义usercontrol/control之类的概念. 所以昨天一直在考虑才能如何达到ui元素的重用,一个主要的困惑是x++没有事件机制(它通过继承,这是由于它的分层机制造成的),不过后来查看formrun的下面两个方法可以达到我的要求

controlMethodOverload
controlMethodOverloadObject

先做了个listmover ,抛砖引玉吧,ax对我而言还是个新手

效果如下

 
此主题相关图片如下:
按此在新窗口浏览图片

用法:

1.导入

 

2.1 创建form,在需要listmover组件的地方添加一个Group(FormGroupControl)

 

 在form的classDeclaration中声明

ListMover listMover;

3. 在form的init 方法中实例化

public void init()
{
int i;
;

    super();

    listMover=new ListMover(this,Control::Group);  // Group是你添加的FormGroupControl的名称

    for(i=0;i<1000;i++)
    {
        listMover.add(strfmt('this is item %1',i));
    }


}

4. 用add方法添加项,如上

5. 用getText/count获取选中的项

已知问题

1.组件的重名,当放多个listmover时

附件是一个listmover类,一个演示用的 form form1

http://www.qiuhao.com/viewFile.asp?BoardID=2&ID=2922

controlMethodOverloadObject 比较有意思的是formrun本身就是默认的,所以,如果你要覆盖listmover中第二个列表框的 modified,你可以在form中增加相应的签名函数

boolean listMoverListBox2_modified()
{

FormListBoxControl l;
 boolean ret;
;
    l=this.controlCallingMethod();
    ret=l.modified();
    info(l.valueStr());
    return ret;
}

 

非动态添加的控件也是如此,不过由于这些事件以controlname_enventname的形式调用,组件的命名避免重复是一个要考虑的问题

posted on 2008-07-11 10:20  jjxstudio  阅读(439)  评论(0编辑  收藏  举报