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的形式调用,组件的命名避免重复是一个要考虑的问题