咱們在百度時,輸入部份內容,便可得到輸入項選擇列表,從而大大減小錄入,用戶的體驗很好,下面是用delphi 模擬這種效果的設計spa
定義 設計
DataLst: TStringList; orm
用於存放供選擇的數據。string
Edt1:TEdit;it
用於接收用戶錄入百度
lbSerach: TListBox;date
用於顯示提示列表List
procedure FillData(DataLst: TStringList );
數據
begindi
......
end;
// 在選擇列表中的按鍵處理
procedure TForm1.lbSerachKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
i: Integer;
begin
if Key = 13 then // 回車鍵
begin
for i := 0 to lbSerach.Items.Count - 1 do // 查找用戶選取的數據項
begin
if lbSerach.Selected[i] then
begin
edt1.Text := lbSerach.Items[i];
lbSerach.Visible := False;
edt1.SetFocus;
Exit;
end;
end;
end else
if Key = VK_UP then // 回到編輯框
begin
if lbSerach.ItemIndex = 0 then
begin
lbSerach.ItemIndex := -1; // 不起做用
lbSerach.Selected[0] := False; // 不起做用
edt1.SetFocus;
end;
end;
end;
// 編輯框內容變化處理
procedure TForm1.edt1Change(Sender: TObject);
var
i: Integer;
str: string;
begin
str := TEdit(Sender).Text;
lbSerach.Items.BeginUpdate;
lbSerach.Clear; // 清除之前的內容
for i := 0 to DataLst.Count - 1 do // 從可用數據中選出 匹配項 最多 15個
begin
if pos(str, DataLst[i]) > 0 then
begin
lbSerach.Items.add(DataLst[i]);
if lbSerach.Items.Count > 15 then
Break;
end;
end;
lbSerach.Items.EndUpdate;
lbSerach.Visible := lbSerach.Items.Count>0;
end;
// 編輯框按鍵處理
procedure TForm1.edt1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if lbSerach.Visible then
begin
if Key = VK_DOWN then
lbSerach.SetFocus;
lbSerach.Selected[0] := True;
end;
end;