多文档程序,子窗口定义如下: 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,为什么?
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‘’
问题还是没有解决阿如果直接在richedit1的onkeydown中写: if key=vk_delete then (sender as TRichEdit).free;//报错:EAccessViolation,好像写地址错误,不明白为什么?释放控件怎么会产生地址错误呢?
怎么办?有没有form1.activecontrol[i]这种形式?那样的话就可以判断是memo1还是label1啦
一个多文档程序
在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
如何在应用程序中删除控件?(就像在设计期间删除一个控件那样的效果)
因此 "用form1.activecontrol.destroy的话,删除掉的是memo1"
建议还是在memo中判断delete键,删除label
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,为什么?
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‘’
if key=vk_delete then
(sender as TRichEdit).free;//报错:EAccessViolation,好像写地址错误,不明白为什么?释放控件怎么会产生地址错误呢?