edit类控件检索后下面弹出列表框的实现方法

作者: koic 分类: delphi 发布时间: 2025-05-23 16:44

如图所示:

PNG 图像
delphi10+dev控件或者其它控件,需要制作一个信息录入窗体,有不少输入框需要可以进行检索,检索时在输入框下方弹出一个小窗口显示检索的内容

代码如下:

procedure TfrmUsers.btnUserInfoClick(Sender: TObject);
var
  aUserInfo:TUserInfo;
begin //查找用户组织架构信息
  edtUsrNam.Text:=Trim(edtUsrNam.Text);
  if edtUsrNam.Text<>'' then
  begin
    with TfrmUserInfo.Create(Self) do
    try
      aUserInfo.FullName:=edtUsrNam.Text;
      UserInfo:=aUserInfo;
      if (ShowModal=mrOk) then //如果实时搜索,就不能用 ShowModal 了,要让窗口置顶
      begin
        aUserInfo:=UserInfo;
        edtUsrNam.Text:=aUserInfo.UsrNam; //姓名
        edtJobID.Text:=aUserInfo.JobID; //工号
        edtUsrNbr.Text:=aUserInfo.UsrNbr; //手机号码
        ......
      end;
    finally
      Free;
    end;
  end
  else MsgBox('提示','请输入搜索关键字!');
  if edtUsrNam.CanFocus then
    edtUsrNam.SetFocus;
end;


以下是弹窗的部份代码
type
  TfrmUserInfo = class(TForm)
    StringGrid: TStringGrid;
    ......
    procedure StringGridDblClick(Sender: TObject);
  private
    { Private declarations }
    FUserInfo:TUserInfo;
    function GetUserInfo():TUserInfo;
  public
    { Public declarations }
    property UserInfo:TUserInfo read FUserInfo write FUserInfo;
  end;


procedure TfrmUserInfo.FormShow(Sender: TObject);
var
  UserInfos:TUserInfos;
begin
  if FUserInfo.FullName<>'' then
  begin
    StringGrid.RowCount:=2;
    StringGrid.Rows[1].Clear;
    if DM.QueryUserInfo(FUserInfo,UserInfos)>0 then //从数据库查询数据,返回到数组UserInfos
    begin
      for var iIndex :Integer:= Low(UserInfos) to High(UserInfos) do
      with UserInfos[iIndex] do
      begin
        .... //把UserInfos数组数据显示到 StringGrid 里
      end;
    end;
  end;
end;


procedure TfrmUserInfo.StringGridDblClick(Sender: TObject);
begin
  FUserInfo:=GetUserInfo(); //获取选中行数据赋值给FUserInfo
  //也可以放置一个button,设置ModalResult=mrOK
  Self.ModalResult:=mrOK; 
  Self.Close;
end;


//员工组织架构
  TUserInfo = record
    JobID,       //工号
    UsrNam,      //姓名
    UsrNbr,      //电话
    ......
  end;
  TUserInfos=Array of TUserInfo;

我现在需要一个录入窗体
录入人员吧
姓名
民族(从民族数据表检索)
性别  直接写死下拉
籍贯  省 市 区(从行政区划数据表检索)
毕业院校  (从教育部发布的高校列表数据表检索)
入职部门 (从部门数据表检索)
直属上级 (从员工数据主表检索)
岗位    (从岗位数据表检索)
….
请问如何实现?

如果只是选值, combobox 控件就可以啊.

PNG 图像

民族 性别   籍贯  省 市 区 毕业院校   入职部门 直属上级  岗位 这些全部可以各自建一个数据表, 数据表的记录另外设窗体来录入.在程序启动时, 去创建 N 个内存表, 把这些记录全部读进内存表中保留以后使用. 在你要检索记录的那个窗体(控件) 那里, 去检索的是内存表中的记录, 速度快且不占用带宽.

这个,用 DBGridEh 很容易做到。

使用上面我的博客文章里面介绍的方法,你在 DBGridEh 的每个单元格里面都可以下拉出来一个表。而且下拉出来的这个表本身也是 DBGridEh,可以把 DBGridEh 的抬头里面的搜索过滤框的功能都用上。

https://blog.csdn.net/pcplayer/article/details/125579693

https://blog.csdn.net/pcplayer/article/details/113873604

 

发表回复