写了一个控件cyPanel, 在其Create时想对其 容器内的控件赋值, 比如:For i := 0 to ControlCount - 1 do
begin
    if (Controls[i] is TcyEdit) then
        ...
end;
可以在其 Create 时 ControlCount 始终为0,也就是Panel创建时就那个些Eidt, Combobox根本就没有创建,那么应该在什么时候来处理这个 初始化呢?请提供相应的思路!

解决方案 »

  1.   

    For i := 0 to cyPanel.ControlCount - 1 do
    begin
        if (cyPanel.Controls[i] is TcyEdit) then
            ...
    end;
      

  2.   

    For i := 0 to ComponentCount- 1 do
    begin
        if (Components[i].ClassNameIs('TcyEdit') then
            ...
    end;
      

  3.   

    你先要确认控件cyPanel在那个容器之上
    如果是Form窗体上的话
    for i := 0 to cyPanel.ControlCount-1 do

    if (cyPanel.Controls[i] is TEdit) then
    if (cyPanel.Controls[i] is TCombobox) then如果在别人容器上,如一个Panel
    那就用for i := 0 to Panel.cyPanel.ControlCount - 1 do

    if (cyPanel.Controls[i] is TEdit) then
    if (cyPanel.Controls[i] is TCombobox) then就可以了你先要保证你所查找的容器正确
      

  4.   

    在Panel创建的时候,其容器中的控件都没有被创建,所以不管 ControlCount 还是 ComponentCount 都是为0
      

  5.   

    你的Panel1已经创建了,所以该Panel1上的控件需要设置一个Parent属性,
    就是将Edit1.Parent := Panel1;
    这样,应该可以了;
      

  6.   

    如果你是想根据数据库查询到的数据自动生成Panel,那么可以换一种方式操作;
    在Data Controls面板上,有一个DBCtrlGrid控件,可以省去很多的编程代码。
      

  7.   

    其实写在构造函数中倒是可以,但Panel创建时 , Edit、Combobox并没有创建!
      

  8.   

    在构造函数中动态创建Edit、Combobox