我在MDI的程序中,想通过FormKeyPress事件,在子窗口中实现enter--->tab的变化,这样为什么不行?(100分)

  • 主题发起人 主题发起人 ylbee
  • 开始时间 开始时间
Y

ylbee

Unregistered / Unconfirmed
GUEST, unregistred user!
我在主窗口中写了一个 mykeypress的函数,如下:
procedure Mainform.myKeypress(Sender:Tobject;var key:char);

Begin
if key=#13 then { 判断是按执行键}
with TForm(TComponent(Sender)) do begin
if not ((ActiveControl is TDbgrid)or(ActiveControl is TwwDBGrid)or
(ActiveControl is TMemo)) Then Begin { 不是在TDbgrid控件内}
key:=#0;
perform(WM_NEXTDLGCTL,0,0);{移动到下一个控件}
end
else begin
if (ActiveControl is TDbgrid) Then begin {是在 TDbgrid 控件内}
With TDbgrid(ActiveControl) Do
if Selectedindex<(FieldCount-1) then
Selectedindex:=Selectedindex+1{ 移动到下一字段}
else
Selectedindex:=0;
end;
if (ActiveControl is TwwDbgrid) Then begin {是在 TDbgrid 控件内}
With TwwDbgrid(ActiveControl) Do
if Selectedindex<(FieldCount-1) then
Selectedindex:=Selectedindex+1{ 移动到下一字段}
else
Selectedindex:=0;
end;
end;
end;
setfocus;
End;

然后我在子窗口中设置了 keypreview=True
在子窗口的formkeypress事件中写了
mainform.mykeypress(Sender,key);

然而现在我发现,TForm(TComponent(Sender))执行后的结果是对的,
但TForm(TComponent(Sender)).ActiveControl 却是 nil
为什么?如何修改?
 
给你个提示,如果是EDIT的话,在它的ONKEYPRESS事件里写
if key=#13 then
postmessage(self.handle,wm_keydown,vk_tab,0);
懂了么
 
procedure Mainform.myKeypress(Sender:Tobject;var key:char);
Begin
if key<>#13 then exit;
selectNext(ActiveControl,true,true);
key=#0;
end;
 
续:jsxjd
将MainForm的keypreview 设为true;
 
用这几句就行了。
if key = #13 then
postmessage(getactivewindow(),WM_KEYDOWN,VK_TAB,0);
 
那么在子窗口的dbgrid中如何实现?
 
一样。
if key = #13 then
postmessage(getactivewindow(),WM_KEYDOWN,VK_TAB,0);
 
后退
顶部