在应用程序中动态生成了一个label控件,
如何删除它?即象设计期间那样按下del键,删除一个控件?
应该触发那个事件?(我看了一下好像没有ondestory或者ondelete这样的事件啊)

解决方案 »

  1.   

    應該在窗體中處理, 而不是在 label中來接收KeyUp的消息, 設置 form1.keypreview為true,然後, 檢測當前 activeControl是不是對應的label, 如是, 刪除!!
      

  2.   

    多文档程序,Form1的ActiveControl是其上的memo1(memo1充满整个窗体),而不是label1,
    怎么办?有没有form1.activecontrol[i]这种形式?那样的话就可以判断是memo1还是label1啦
      

  3.   

    把问题说具体点:
      一个多文档程序
      在form1上是memo1(memo1.align:=alClient),在memo1上动态生成一个label1,
    如果想删除label1,就是按下delete键从memo1上删除掉label1,该如何做?
      用form1.activecontrol.destroy的话,删除掉的是memo1,因为虽然label1在
    memo1上生成,label1和memo1的parent都是form1,如何才能判断删除的是labe1l呢?
      如果把label1换成richedit1又该怎么做呢?因为richedit1中应该是允许按下
    delete键进行文本编辑的,不能把这个事件当作删除richedit1
      如何在应用程序中删除控件?(就像在设计期间删除一个控件那样的效果)
      

  4.   

    label是没有焦点的,好象无法将label设置为的activcontrol吧。
    因此 "用form1.activecontrol.destroy的话,删除掉的是memo1"
    建议还是在memo中判断delete键,删除label
      

  5.   

    多文档程序,子窗口定义如下:
    type
      TMDIChild = class(TForm)
        MemoNew: TMemo;procedure TMDIChild.FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if (Key=VK_DELETE) then
      MainFormBill.ActiveMDIChild.ActiveControl.Free;//出错
    end;我也想在memo中判断delete键,但是:一,memo,label,richedit地位是相同的,他们的parent都是ActiveMDIChild,label并不从属于memo;二,我也不能取得ActiveMDIChild的
    memo,很奇怪,写成MainForm.ActiveMDIChild...后面的下拉框里面没有memo,为什么?
      

  6.   

    from delphi helpTCustomForm.::ActiveMDIChild:
    Specifies the MDI child that has focus.
    property ActiveMDIChild: TForm;///////ActiveMDIChild是TForm类型的
    Description
    Use ActiveMDIChild to get the MDI child that has focus.ActiveMDIChild是TForm类型的,Tform中肯定没有memo的,假如你的子窗体是form1,那么memo的定义是在TForm1中,而不是TForm中。 因此 ‘’后面的下拉框里面没有memo‘’
      

  7.   

    问题还是没有解决阿如果直接在richedit1的onkeydown中写:
      if key=vk_delete then
      (sender as TRichEdit).free;//报错:EAccessViolation,好像写地址错误,不明白为什么?释放控件怎么会产生地址错误呢?