Delphi 回车键没有执行它所执行的操作';它应该在子窗体上显示,是吗?
我正在使用以下命令调用子窗体:Delphi 回车键没有执行它所执行的操作';它应该在子窗体上显示,是吗?,delphi,Delphi,我正在使用以下命令调用子窗体: var frm: TForm2; begin try frm := TForm2.Create(Application); frm.ShowModal; finally frm.Free; end; end; 该子窗体中有一个丰富的编辑,但是,当我按[enter]时,它充当一个选项卡键并切换焦点(这适用于我在这个特定应用程序中创建的所有子窗体,与RichEdit本身无关) 注意事项:我在主窗体和子窗体上尝试了RichEdit.WantRetur
var frm: TForm2;
begin
try
frm := TForm2.Create(Application);
frm.ShowModal;
finally
frm.Free;
end;
end;
该子窗体中有一个丰富的编辑,但是,当我按[enter]时,它充当一个选项卡键并切换焦点(这适用于我在这个特定应用程序中创建的所有子窗体,与RichEdit本身无关)
注意事项:我在主窗体和子窗体上尝试了RichEdit.WantReturns true/false、RichEdit.WanTabs true/false和KeyPreview true/false
我的想法:主形态根本没有任何onkey事件,祖先形态与[enter]没有任何关系。由于代码非常庞大,因此可能会在某个地方指定enter作为选项卡,但是这太难找到了。所以我只是想,如果有一种方法可以让enter像enter一样工作,那就容易多了
有什么想法吗
谢谢大家!
编辑
我在一个远程.pas文件中发现了这个问题
if Msg.wParam = 13 then
begin
//bunch of code
Msg.wParam := 9; //Ta-da
谢谢大家的支持。根据这些信息,无法确定问题出在哪里
我会通过将debug DCU设置为True,在TWinControl上设置一个断点来调试它。选择Next(下一步),并尝试找出按下ENTER键时它为什么会出现在那里。根据此信息无法确定问题出在哪里
我会通过将debug DCUs设置为True,在TWinControl上设置断点来调试它。选择Next(下一步),并尝试找出当按下ENTER键时它为什么会在那里着陆。首先,有没有不遵循该习惯用法的特殊原因
frm := TForm2.Create(Self);
try
frm.ShowModal;
finally
frm.Free;
end;
??此标准代码更好,因为1)如果未成功创建frm
,则不会调用Free
,(2)当对话框关闭时,操作系统(即Windows)知道要聚焦哪个窗体(Self
)
第二,您是否在TForm2
上有一个按钮,上面有Default:=true
?如果是这样,当您按Enter键时,此按钮将被“单击”(除非具有键盘焦点的控件执行特殊操作-TEdit
的情况并非如此,但可能是TRichEdit
)。但是,如果TRichEdit
具有WantReturns:=true
,则Enter键应仅在Rich Edit控件中创建新行。这是正常的行为
如果在TForm2
的实例中按Enter键选择对话框中的下一个控件(关于选项卡顺序属性),则您可能在TForm2
中做了一些特殊的操作。您是否重写了TForm2
的WndProc
或CreateParams
过程?如果是的话,请看一看!或者在TForm2.OnCreate中是否有一些非常奇怪的东西
更新
既然你说在TForm2
中没有任何有趣的东西,我的灵力告诉我你在你的主表单中添加了一个TApplicationEvents
,当你响应它的OnMessage
事件时,你做了一些奇怪的事情。首先,你为什么不遵循这个成语
frm := TForm2.Create(Self);
try
frm.ShowModal;
finally
frm.Free;
end;
??此标准代码更好,因为1)如果未成功创建frm
,则不会调用Free
,(2)当对话框关闭时,操作系统(即Windows)知道要聚焦哪个窗体(Self
)
第二,您是否在TForm2
上有一个按钮,上面有Default:=true
?如果是这样,当您按Enter键时,此按钮将被“单击”(除非具有键盘焦点的控件执行特殊操作-TEdit
的情况并非如此,但可能是TRichEdit
)。但是,如果TRichEdit
具有WantReturns:=true
,则Enter键应仅在Rich Edit控件中创建新行。这是正常的行为
如果在TForm2
的实例中按Enter键选择对话框中的下一个控件(关于选项卡顺序属性),则您可能在TForm2
中做了一些特殊的操作。您是否重写了TForm2
的WndProc
或CreateParams
过程?如果是的话,请看一看!或者在TForm2.OnCreate中是否有一些非常奇怪的东西
更新
既然你说在TForm2
中没有任何有趣的东西,我的灵力告诉我你在你的主窗体中添加了一个TApplicationEvents
,你在响应它的OnMessage
事件时做了一些奇怪的事情。错误(可能)不在窗体2中,因为Form2在干净的项目中正常工作
这就剩下了mainform和项目文件(带有.dpr的文件)。
在你的问题中发布dpr文件(program1.dpr)的代码,我们会看一看。
接下来是主窗体。显然,要粘贴的代码太多了,所以让我们在代码中包含对“Enter”或“Return”的所有引用
使用Delphi搜索主表单
在Delphi中打开主窗体(通常为Form1),
右键单击表单并从菜单中选择查看为文本。
有时Delphi会拒绝(当使用框架等时),如果拒绝,请跳到下面使用写字板搜索主窗体一节
使用写字板搜索主表单
在写字板中打开主窗体的.DFM文件(通常命名为unit1.DFM)
在表单中查找“输入”
搜索单词“Enter”和“Return”,复制并粘贴您在问题中找到的行,以及上面包含单词object
的第一行
在mainform.pas(unit1.pas)中查找“回车”
使用VK_Enter和VK_Return以及#13和#10搜索所有行,然后将它们与一些上下文代码一起粘贴到您的问题中
其他