我在一个from上放了一个panel,上面放了几个edit
在edit的onKeyPress事件中加入如下代码:
procedure TformProDept.m_editDeptKeyPress(Sender: TObject; var Key: Char);
begin
inherited;
if Key = #13 then
SelectNext(ActiveControl,True,False);
end;
希望可以实现在edit中回车时,焦点自动跳到下一个edit上(Edit Tab Order顺序已设好)
结果未能实现,跟踪发现焦点移到了panel上
如果不用panel则可以顺利实现.
问1.为什么会出现这种情况,(Edit Tab Order顺序中并没有panel啊);
2.该如何解决(不要告诉我不用panel).
每答对一题30分:),先到先得!
在edit的onKeyPress事件中加入如下代码:
procedure TformProDept.m_editDeptKeyPress(Sender: TObject; var Key: Char);
begin
inherited;
if Key = #13 then
SelectNext(ActiveControl,True,False);
end;
希望可以实现在edit中回车时,焦点自动跳到下一个edit上(Edit Tab Order顺序已设好)
结果未能实现,跟踪发现焦点移到了panel上
如果不用panel则可以顺利实现.
问1.为什么会出现这种情况,(Edit Tab Order顺序中并没有panel啊);
2.该如何解决(不要告诉我不用panel).
每答对一题30分:),先到先得!
解决方案 »
- 再问关于DELPHI编写DLL文件并动态调用
- 我急!,我急!!,我急急急!!!
- 为什么把.WAV文件做在资源文件里,而用下列HAN数调用却播放不出声音?
- 熟悉fastreport的高手请进来!(在线等待)
- 我们的网站开张了,大家来看看?
- 一个DELPHI 人应该知道而我不知道的问题
- 寻找一个功能强大的实时曲线绘制控件,全分答谢!!!!!
- 如何知道一个工程中的某个窗体是否已经打开??
- 程序运行后出错,进入调试状态,怎样在不退出delphi的情况下退出调试状态?
- contexteditor 这个delphi写的开源编辑器怎么样才能支持utf8
- 高分求SQL语句,在线等待,马上给分!!!!
- 关于ODBC连接数据库的问题?
把你的代码改造一下就可以了
procedure TformProDept.m_editDeptKeyPress(Sender: TObject; var Key: Char);
begin
inherited;
if Key = #13 then
SelectNext(ActiveControl,True,False);
while ActiveControl is TPanel do
SelectNext(ActiveControl,True,False);
end;
比如有两个PANEL,一个panel,taborder为0,上有3个edit,taborder分别为0,1,2。则在taborder为2的edit回车就会跳到另一PANEL上
begin
inherited;
if Key = #13 then
if while ActiveControl is Tedit do
begin
key:=#0;
perform(WM_NEXTDLGCTL,0,0);
end;
end;
且FORM的keypreview属性为TRUE;
你说的很对,并且不用设FORM的keypreview属性为TRUE就已经可行了
顺便问一下,perform这个函数的功能是什么,我看了一下帮助,没太懂
为什么要设FORM的keypreview属性啊
能解释一下么,我还想知道为什么会出现这种情况
呵呵,有点贪心了,不过真要谢谢你,分是一定没问题的拉
我是想在预设Edit Tab Order顺序的条件下让它自动指向下一个edit
并不是想用edit.setFocus(),
这样的话可以节省点代码嘛to : hety(笨菜阿诺德)
我在只有一个panel的情况下也是如此阿,并且不论在edit*上都是这样
这样做的结果并不能指向下一个edit
好像是指到了其他地方,因为我无法知道panel的tab order顺序的下一个是什么啊
并且奇怪的是,tab order顺序中没有panel啊
如果指向一个query 或image呢
哎~,你把想获得焦点的类列出来不就可以了!
procedure TformProDept.m_editDeptKeyPress(Sender: TObject; var Key: Char);
begin
inherited;
if Key = #13 then
SelectNext(ActiveControl,True,False);
while not (ActiveControl is TEdit) do
SelectNext(ActiveControl,True,False);
end;
(把FORM的KeyPreview=true)
在FORM的OnKeyPress事件加入
if key = #13 then
keybd_event(VK_TAB,0,0,0);
其他的就不用动了,即可
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;type
TForm1 = class(TForm)
Panel1: TPanel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Edit3KeyPress(Sender: TObject; var Key: Char);
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
edit2.SetFocus;
end;procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
edit1.SetFocus;
end;procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
edit3.SetFocus;
end;end.
begin
inherited;
if Key = #13 then
perform(WM_NEXTDLGCTL,0,0);
while not (ActiveControl is TEdit) do
perform(WM_NEXTDLGCTL,0,0);
end;
直接换成 perform(WM_NEXTDLGCTL,0,0);就可以to:zwjchina(蒲石)
并不是只有edit,可能还有combobox之类的呢to : yanxiaokang(yanxiaokang)
我是想在预设Edit Tab Order顺序的条件下让它自动指向下一个edit
并不是想用edit.setFocus(),
这样的话可以节省点代码嘛
----我已经回复crossbow(La Vida Es Amor)一遍了,但还是谢谢你
并且tab order中没有panel啊我想问为什么perform可以做到,麻烦各位了.