首先Form1继承TForm, Form2继承Form1, Form3继承Form2, 然后在Form1的OnKeyDown事件中写按Escape键关闭窗体:
if Key = VK_ESCAPE then
begin
Close;
end;
而且在Form1.KeyPreview := True; 当然Form2, Form3.KeyPreview也是True, 问题就在这里: 当Form3.Create时, 按Escape键为什么窗体不会关闭呢 ?
如果Form3直接继承Form1就不会发生这种情况.
if Key = VK_ESCAPE then
begin
Close;
end;
而且在Form1.KeyPreview := True; 当然Form2, Form3.KeyPreview也是True, 问题就在这里: 当Form3.Create时, 按Escape键为什么窗体不会关闭呢 ?
如果Form3直接继承Form1就不会发生这种情况.
这个信息会保存到窗口的描述文件中,在Form1的实例初始化时,会执行一个赋值操作:
self.onKeyDown := Form1KeyDown;当发生按键的事件时,系统会调用Form1实例的函数指针onKeyDown。Form2,Form3继承自Form1,意思是他们拥有Form1的所有字段和方法(比如那个Form1OnKeyDown方法),但是,那个赋值操作并没有继承下来。解决方法:
contructor Form3.Create(...)
begin
...
self.onKeyDown := self.Form1KeyDown;//(Form1中)
end;你试试,保证ok.
self.onKeyDown := self.Form1KeyDown;