将OBJECT添加到正在定义的对象的子容器

时间:2016-06-28 17:36:12

标签: visual-foxpro foxpro

我正在编写一个程序来生成一个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方法来解决这个问题,但我宁愿在类定义中使用它。

2 个答案:

答案 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()函数,您可以获得对您正在设计的表单上的任何对象的引用。如果您有所需的参考,您可以以编程方式在该代码窗口中添加和排列对象,选择代码并执行选择(擦除控件,更正代码并在第一次无法正确执行时重试)。这是暂时的“做和扔掉”的风格建设者。