windev的内部窗口传参方式及其与类的相似性

时间:2023-01-16 04:00:11

最近的应用,需要向一个内部窗口(internal window)传参,因为官方文档的说明较为宽泛,虽然结果只有两小段代码,但也费了很大的劲。把所有关于procedure的文档看一遍,又是重新学习了一遍C#的类与方法,才最终解决了这个问题。向内部窗口传参,有三个方法可以使用,我使用的是第三种方法,以下会重点说明第三种方法:

方法一:如果是动态标签页(Dynamic Tab)的内部窗口,可以通过TabOpen直接传参,这个和窗口传参的用法一样,如下:

TabOpen(TAB_Main, "Test of the new tab", IWIN_InternalWindow,"Param1","Param2")

方法二:如果是内部窗口控件的内部窗口,可以用方法二和方法三。方法二直接用函数ChangeSourceWindow来传递参数

方法三:因为我的应用不需要改变内部窗口,所以使用了procedure的方式来传递参数。步骤如下:

1、在内部窗口创建一个Local Procedure,如:

Procedure IWINParam(Param1,Param2)
//以下为代码块,Param1和Param2类似于行参

2、在放置内部窗口控件的父窗口,调用步骤1自建的过程函数,并将实参传递过去,如:

//其中IWCTRL_ControlName为内部窗口控件的名称,此处的Param1和Param2为实参

Param1 is string = "HI"
Param2 is int = 123 IWCTRL_ControlName.IWINParam(Param1,Param2)

两个步骤,即可完成参数传递,很简单。但因为官方文档说明的隐晦,却是让人想破了脑袋,直到重新学习了一次C#的类和方法,才推断官方文档中的说明,也许就是引用类方法的用法。事实证明,两者的相似性是非常大的。内部窗口相当于一个类,类的名称就是父窗口中内部窗口控件的名称,而在内部窗口中自建的Procedure,相当于类的一个方法,所以用类名.方法名的方式,可以直接调用这个方法。