回车跳转问题(16分)

  • 主题发起人 主题发起人 shanshan033
  • 开始时间 开始时间
S

shanshan033

Unregistered / Unconfirmed
GUEST, unregistred user!
我建立的一个窗口,上面有很多控件,我想用回车代替tab进行跳转,我查看了一些论坛上的贴子,是在窗口的keypreview设置为true,所有控件的tabstop设置为true,再一个一个控件改变taborder,是这样的吗,但是当我把有些taborder设置为0的时候,其他控件的taborder都自动发生了变化,为什么,键入taborder设置好了的,我在窗口的
procedure TF_from_input.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=13 then SelectNext(self.ActiveControl,True,True);
end;

为什么我看到好多是if key=[red]#[/red]13 then SelectNext(self.ActiveControl,True,True);
我这里如果加了#号的就保存不了,但是不管上面怎么操作,我还是实现不了跳转,为什么???
 
要加的饿
if (key = #13) then //回车键
SendMessage(Self.Handle, WM_NEXTDLGCTL, 0, 0);
看看呢
 
改成:
procedure TF_from_input.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = VK_RETURN then
SelectNext(self.ActiveControl,True,True);
end;
就可以了
原因是参数类型的问题,这个过程的参数Key是Word类型的,而不是Char类型的。
以下过程才能够用#13来代表回车键:
procedure TfmModifyUser.btnOkKeyPress(Sender: TObject; var Key: Char);
begin
inherited;
if (key = #13) then //回车键
SendMessage(Self.Handle, WM_NEXTDLGCTL, 0, 0);
end;
是可以的,因为这里的Key参数是Char类型的
 
#13是代表一个字符,而13则是整数.
产生的问题原因是因为, 他们都是写在OnKeyPress中...KeyPress中提供一个Key:char的参数,所以用#13.
而你是在KeyDown中, 在KeyDown中, 相应的参数为:Key: Word,所以在你这儿只能为13.
 
不管我用上面的什么方法,老是跳的结果不是我要的结果呀,老是一回车就跳到一个单选按纽上去了,我设置单选按纽的taborder是最大的呀
 
那就这样:
procedure TF_from_input.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = VK_RETURN then
SomeControl.SetFocus; //SomeControl是你想要转到的控件.
end;
 
但是那样的话,那也不应该是写在TF_from_input上面了,而是写在控件上面了
但是我的窗口上的控件太多了,那就要写很多次了,不是吗?
 
1、把你的from的下面事件使用如下代码
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = VK_RETURN then
SelectNext(self.ActiveControl,True,True);
end;
2、设置form属性,KeyPreview=true
3、调整你的控件的Taborder顺序,然后就一起OK。
 
估计就是你的窗体属性keypreview 没有设置成true
默认是false
 
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = VK_RETURN then
edit2.setfocus;
end;
 
楼主确定那个控件的Default属性设为False了吗
 
首先将窗体的keypreview设置为True;
然后
procedure Tform1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then{如果是enter键}
begin
key:=#0;{忽略enter键}
perform(wm_nextDlgCtl,0,0);{到下一控件}
end;
end;
一定行的!!不用调整TabOrder顺序!
 
后退
顶部