将对象添加到被定义对象的子容器中



我正在编写一个程序来生成一个VFP表单类,其中包含大量(90+每个)标签和单选按钮。这是简单的部分。(是的,我知道有很多单选按钮,但这是用户想要的)。

在我们的应用程序中有几个VCXs做类似的事情,但没有那么多单独的控件。因此,与其花费大量的时间拖拽字段,并意识到我碰巧有一个方便的所有字段列表,它们的选项和默认值,不如使用"查看类代码"选项从类浏览器中获取代码的样例。然后我编写代码生成一个包含所有我需要的部件的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

类frame是一个类(来自VCX),它包含一个名为"cntouter"的容器。类控件是包含所有标签/单选按钮的容器。

问题是显然你不能,在DEFINE CLASS命令中,向成员添加对象。点号语法会导致语法错误。然而,这种技术在'View Class Code'输出中使用。

我怀疑我可以通过生成一个Init方法来解决这个问题,该方法调用ADDOBJECT()来将我的控制容器添加到cntouter,但我宁愿在类定义中使用它。

"View class Code"选项不会生成可运行代码;从来没有。

我的建议是创建一个你想要的外观的选项按钮类。然后,使用您现有的列表填充游标,并编写代码来旋转游标,并将选项按钮添加到容器类中。

这里你需要知道的关键是,你可以在IDE中运行代码,影响在窗体设计器或类设计器中打开的窗体或类。建筑商就是这么做的。因此,与其生成基于代码的类,不如使用代码来创建可视类。

如果你想在代码中做到这一点,那么首先你不应该像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()函数,您可以获得对您正在设计的表单上的任何对象的引用。一旦你有了所需的引用,你就可以在代码窗口中以编程方式添加和排列对象,选择代码并执行选择(删除控件,更正代码,如果第一次不能正确执行则重试)。这是一个临时的"做了就扔掉"的样式生成器。

相关内容

  • 没有找到相关文章

最新更新