一个Form1中有一个TEdit控件TEdit1 ,给TEdit1添加一个OnChange事件,
  另一个From2中有一个TEdit控件TEdit2,
  代码
 From2.TEdit2:=From1.TEdit1;From2.show;这是TEdit2并未获得TEdit1的属性,如text值,事件多未赋值过来,
但是我在跟踪代码的时候,From2.TEdit2.text=From1.TEdit1.text; 
但是From2.TEdit2显示的text还是未改变
    From2.TEdit2.OnChange 也没有赋值
  
  什么原因??是不是没刷新 ??  谢谢

解决方案 »

  1.   

    From2.TEdit2.text=From1.TEdit1.text  Form2.Edit2.Text := Form1.Edit1.Text; //应该这么写吧?
      

  2.   

    比如说我在一个FormA写好一个功能较全的controlA,在FormB中我要继续用这个controlA,就不用重新写功能了。 当然不考虑用继承
      

  3.   


    Edit2:=Edit1,,,我是要获得Edit1的所有特性,text,event等, 如果赋值做到,那有什么其他方法可以回去Edit1一个完全一样的副本???继承其所有特性
      

  4.   

      From1.Button1.Assign(From2.Button1);
      

  5.   

    edit2.assign(edit1)
    会出错,不知道为什么
      

  6.   

    5楼的思路是对的。
    TEdit是类,不是如Integer,String一样内置数据类型,是不能直接赋值的,Edit2:=Edit1是对象变量的赋值,不是对象实例的赋值,这句的结果将对象Edit2指向Edit1所指向的TEdit类的实例,而Edit2原来指向的实例对象丢失了,它在内存中仍然存在,只是不能再访问它,唯一指向它的Edit2现在指向了跟Edit1相同的实例对象。
       说简单点Edit1,Edit2都是类似于指向对象实例的指针,你改变了指针而没有改变实际对象实例。也就是Form2中的Edit2在这之后指向的是Form1.Edit1,跟Form2中显示的Edit控件已经没有关系,该Edit已无法直接访问。
    你试下Form2.Edit1.text:='NewEditText',看改变的是哪个Edit的属性就知道了!
        Assign方法用来复制对象。Form2.Edit2.Assign(Edit1)应该没问题。至于TEdit.Assign方法会Copy多少属性自己到VCL的源代码中看。如果Form2在是没有显示的把这行写到From2.show后面试试。
      

  7.   

    Form2.Edit2.Text := Form1.Edit1.Text;
    Form2.Edit2.onclick := Form1.Edit1.onclick;.....
    and so on
      

  8.   

    所有属性都复制的话,Edit2的parent和Owner不是也变回Form1了嘛,你还是指定相关的属性和事件吧
      

  9.   

    我觉得12楼的方法可行
    或者你觉得某些组件的方法比较常用,就直接写成一个公共的Procedure,然后给别的组件动态赋值就好了。比如:
    Type
      Form1 = class(TForm)
        public 
          procedure ButtonClick(Sender: TObject)
      end;
    ...procedure ButtonClick(Sender: TObject)
    begin
      Showmessage('Hi');
    end;procedure TForm1.show(Sender: TObject)
    begin
      Button1.onclick := ButtonClick;
    end;
      

  10.   

    上面写的好像有点儿问题type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure FormShow(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        procedure Button1Click(Sender: TObject);
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      ShowMessage('Hi');
    end;procedure TForm1.FormShow(Sender: TObject);
    begin
      Button1.OnClick := Button1Click;
    end;