回车 向下键往下走,上箭头往上走 procedure TFrmDevice.EdtDeviceIDKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Key=VK_Return) or (Key=VK_Down) then begin Perform(WM_NEXTDLGCTL,0,0); end; if Key=VK_Up then begin Perform(WM_NEXTDLGCTL,1,0); end; end;
edit.text有长度限制吗? 还是有规律性可言?procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if length(edit1.Text)=6 then begin key:=#0; sendmessage(self.handle,WM_NEXTDLGCTL,0,0); end; end;====================================================================像和尚的唐僧====================================================================
if key=#13 then
postmessage((sender as Tedit).handle,wm_keydown,vk_tab,0);
要不然那能有这么智能化,的要不然就是你的
思想和computer连在一起了,你在想做什么
它就做什么。我也想这样啊!
if key=13 then
edit2.setfouce;
支持 tab
procedure TFrmDevice.EdtDeviceIDKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key=VK_Return) or (Key=VK_Down) then
begin
Perform(WM_NEXTDLGCTL,0,0);
end;
if Key=VK_Up then
begin
Perform(WM_NEXTDLGCTL,1,0);
end;
end;
还是有规律性可言?procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if length(edit1.Text)=6 then
begin
key:=#0;
sendmessage(self.handle,WM_NEXTDLGCTL,0,0);
end;
end;====================================================================像和尚的唐僧====================================================================
if key=#13 then
begin
key=#0;
edit2.setfocus;
end;
begin
if length(edit1.Text)=6 then
begin
key:=#0;
edit2.setfocus;
end;
end;
如果我的界面上有几十个Edit控件,岂不是要写一大堆OnKeyPress事件处理函数,还有我的目的也不是如何让计算机判断用户已输完,而是 怎样让众多的Edit控件只用一个方法就可以完成切换。
因此我想了一个通用的方法:(C++Builder代码)TEdit *myedit = dynamic_cast(TEdit *)<sender>;
if (myedit->Text.Length()==myedit.MaxLength)
{
for(;this->Components[myedit->tag+1]->ComponentIndex < this->ComponentCount;)
((TEdit *)this->Components[myedit->tag+1])->SetFocus();//强制类型转换为Edit类型,否则不可使用SetFocus函数。
}
...
这样在所有的Edit类型的控件中引用相同的OnChang事件处理函数就可以了。