在做一个酒店管理系统的时候用到了ListView,是否能够当鼠标移动到某一个房价的时候给出该房间的信息呢?这时候可以考虑使用ToolTip控件显示提示信息。
可以首先在ListViewItem的对象中保存房价信息,代码如下:
/// <summary> /// 树节点变化,加载对应房间类型的房间信息。 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tvRoom_AfterSelect(object sender, TreeViewEventArgs e) { toolTip1.RemoveAll(); if (this.tvRoom.SelectedNode.Level == 0) { return; } int roomTypeID = Convert.ToInt32(this.tvRoom.SelectedNode.Tag); IList<Room>rooms = RoomManager.GetRoomList("", roomTypeID.ToString()); this.lvRooms.Items.Clear(); foreach (Room rm in rooms) { ListViewItem item = new ListViewItem(); item.Text = rm.RoomID.ToString(); if (rm.RoomStateID == 1) { item.ImageIndex = 0; } else if (rm.RoomStateID == 2) { item.ImageIndex = 1; } item.Tag = rm; this.lvRooms.Items.Add(item); } }
接下来在ListView中鼠标移动时使用ToolTip动态显示信息的实现步骤如下,
1、设置窗体的成员变量,数据类型为ListViewItem
ListViewItem oldItem = null;
2、添加ListView的MouseMove事件 lvRooms_MouseMove(object sender, MouseEventArgs e)
根据鼠标的当前位置得到ListViewItem项
ListViewItem lvi = this.listView.GetItemAt(e.X, e.Y);
3、判断鼠标当前的位置是否有得到了的ListViewItem的对象,如果为空或者与原来保存的oldItem是同一个对象,则返回(不再重复显示该ListViewItem的对象的房价信息),否则对于得到的新的ListViewItem对象获取其保存的信息通过ToolTip提示控件显示出来,且给出了显示位置(该位置相对于当前ListViewItem对象的正下方,可以根据自己的需要进行调整)。
if (item == null || item==oldItem) { return; } else { oldItem = item; Room rm = (Room)item.Tag; string mytootip = "房间状态:" + rm.RoomStateName + "\r\n" + "房间描述:" + rm.Description + "\r\n" + "床位:" + (rm.BedNum - rm.GuestNum); toolTip1.Show(mytootip, this.lvRooms, item.Position.X + 10, item.Position.Y + 35); }
以上,问题解决。下面给出本文的案例源代码下载地址