我正在编写一个程序来生成一个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 CLASS命令中向一个成员添加OBJECT。虚线语法会导致语法错误。然而,这种技术用于“视图类代码”输出。
我怀疑我可以通过生成一个调用ADDOBJECT()将我的控件容器添加到cntouter的Init方法来解决这个问题,但我宁愿在类定义中使用它。
答案 0 :(得分:2)
"查看类代码"选项不会产生可运行的代码;从来没有。
我建议你做你需要的是创建一个具有你想要的外观的选项按钮类。然后,使用现有列表填充游标并编写旋转的代码,并将选项按钮添加到容器类。
您需要知道的关键是您可以在IDE中运行影响在表单设计器或类设计器中打开的表单或类的代码。这就是建设者所做的事情。因此,不是生成基于代码的类,而是使用代码来创建可视类。
答案 1 :(得分:1)
如果你想在代码中执行此操作,那么首先你不应该像Tamar已经指出的那样依赖视图代码。您可以在代码中执行任何形式及其控件(可能除了一个或两个activex控件之外),但您需要了解如何编写容器类型控件的代码。首先,要从类库中添加类,需要对其源进行分类。即:
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()函数,您可以获得对您正在设计的表单上的任何对象的引用。如果您有所需的参考,您可以以编程方式在该代码窗口中添加和排列对象,选择代码并执行选择(擦除控件,更正代码并在第一次无法正确执行时重试)。这是暂时的“做和扔掉”的风格建设者。