我正在编写一个程序来生成一个VFP表单类,其中包含很多标签和单选按钮(90+ )。这是最简单的部分。(是的,我知道这是很多单选按钮,但这正是用户想要的)。
我们的应用程序中有几个VCX,它们做一些类似的事情,但没有使用与单个控件相近的控件。因此,我没有花费我生命中很大一部分时间来拖放字段,意识到我碰巧有一个方便的列表,列出了所有字段、它们的选项和默认值,我使用了类浏览器中的“查看类代码”选项来获取代码作为基础的示例。然后,我编写了代码来生成一个PRG,其中包含了我需要的所有部分。
我的实际问题是,“查看类代码”输出的代码似乎包含无效语法:
DEFINE CLASS form40 AS frmae
Height = 427
Width = 710
ScrollBars = 2
DoCreate = .T.
Visible = .T.
Name = "form40"
ADD OBJECT form40.cntouter.cntform40 AS cntctrls WITH ;
Top = 175, ;
Left = 2, ;
Visible = .T., ;
Name = "Cntform40"
ENDDEFINE
类frmae是一个类(来自VCX),它包括一个名为“cntouter”的容器。类cntctrls是包含所有标签/单选按钮的容器。
问题是,显然不能在DEFINE命令中向成员添加对象。虚线语法会导致语法错误。但是,在“查看类代码”输出中使用了这种技术。
我怀疑我可以通过生成一个调用ADDOBJECT()来将我的控制容器添加到cntouter的Init方法来解决这个问题,但是我更希望将它放在类定义中。
发布于 2016-06-28 12:21:22
“查看类代码”选项不会生成可运行的代码;它从未生成过。
我的建议是创建一个具有您想要的外观的选项按钮类。然后,使用您现有的列表填充游标,并编写代码,从中旋转并向容器类添加选项按钮。
这里需要知道的关键是,您可以在IDE中运行影响窗体设计器或类设计器中打开的窗体或类的代码。建筑工人就是这么做的。因此,与其生成基于代码的类,不如使用代码创建一个可视化类。
发布于 2016-06-28 14:29:10
如果您想在代码中这样做,那么首先不应该像Tamar已经指出的那样依赖视图代码。您可以在代码中执行任何窗体及其控件(可能有一两个activex控件除外),但您需要了解如何编写容器类型控件。首先,要从类库中添加类,需要对其源进行分隔。ie:
add object myContainer as MyBeautifulContainer from myClasslib.vcx
不起作用。相反,您需要在代码中定义如下类:
define class form40 as form
* ...
add object myContainer as MyContainer with ...
* ...
enddefine
define class myContainer as MyBeautifulContainer from myClasslib.vcx
* additiobnal code if any
enddefine
其次,您需要先创建内部控件,然后根据需要添加以创建最外层的对象。
在设计时,您可以转到命令窗口,弹出一个代码窗口:
modify command [enter]
然后,使用ASELOBJ()函数,您可以获得正在设计的表单上的任何对象的引用。如果您有所需的引用,您可以通过编程方式在该代码窗口中添加和排列对象,选择代码并执行选择(删除控件,更正代码,如果第一次不能正确执行,请重试)。这是临时的“做和扔掉”风格的建设者。
https://stackoverflow.com/questions/38082805
复制相似问题