要求给定一个楼层号,按照楼层的房间数动态生成对应的房间,用Edit来对应,Edit的Text为房间号!在数据库中存有每个房间的具体信息,当鼠标在对应的Edit上停留时,提示信息显示出库中对应房间中的住宿人数和其中一个人的姓名。请教如何操作??
同时在换楼层时,可能不同的楼层房间数不同,因此重新生成新的Edit时还要将前面生成的Edit控件释放掉,这又如何处理??
请教高手!!

解决方案 »

  1.   

    这个,用ListView比较好实现,每个Item列出房间号,写事件当鼠标放在某Item上时就调用显示其房间信息的窗体。
    用Edit也可以实现,这就需要动态创建Edit控件了。你可以先创建一个TList对象来记载你创建了多少TEdit,如:
    EditList: TList;
    AEdit: TEdit;AEdit:=TEdit.Create(Self);
    AEdit.Text:='某房间号';
    AEdit.Left:=x;AEdit.Top:=y;...
    EditList.Add(AEdit);还得写一个事件响应过程,如ProcA,上面每次创建AEdit时都指定事件处理过程:
    AEdit.OnMouseOver(具体什么事件,我不清楚你的要求,这里只原理性地说说,看着用吧):=ProcA
    ProcA的第一个参数肯定是Sender,可以从Sender来判断是哪个Edit发来的事件。如:
    if TEdit(Sender).Text='RoomA' then...
    最后要释放的时候,从EditList中可知道你创建了多少个Edit,从而全部释放。
      

  2.   

    这个,用ListView比较好实现,每个Item列出房间号,写事件当鼠标放在某Item上时就调用显示其房间信息的窗体。
    用Edit也可以实现,这就需要动态创建Edit控件了。你可以先创建一个TList对象来记载你创建了多少TEdit,如:
    EditList: TList;
    AEdit: TEdit;AEdit:=TEdit.Create(Self);
    AEdit.Text:='某房间号';
    AEdit.Left:=x;AEdit.Top:=y;...
    EditList.Add(AEdit);还得写一个事件响应过程,如ProcA,上面每次创建AEdit时都指定事件处理过程:
    AEdit.OnMouseOver(具体什么事件,我不清楚你的要求,这里只原理性地说说,看着用吧):=ProcA
    ProcA的第一个参数肯定是Sender,可以从Sender来判断是哪个Edit发来的事件。如:
    if TEdit(Sender).Text='RoomA' then...
    最后要释放的时候,从EditList中可知道你创建了多少个Edit,从而全部释放。
      

  3.   

    你的情况的需要在创建控件的时候关联一些消息事件,销毁Free(用FreeAndNil最好)调就可以了。
      

  4.   

    To:chenzhiqiang(惘) 
      麻烦一下,我的Edit都是在同一个窗体上创建的,虽然不同楼层的房间数不同但是前面的位置都重叠,怎么用TList来释放??
    谢谢!!
      

  5.   

    位置重叠没关系,他们是不同的对象,每次创建都记载在TList里,换楼层时,从TList中释放所有Edit控件:
    for i:=0 to EditList.count-1 do TEdit(EditList.Item[i]).Free;
    EditList.Clear;
    EditList.Item[i]的写法可能是错误的,我现在机器上没装Delphi,你看着改。