正在琢磨开发套酒店的客房控制系统,需要做一个客房的实时房态图来显示各个房间的状态信息,这样就能更加形象的表示出信息。
<
备注: 用不同的颜色和图标来表示房间的状态<如:空房 用绿色表示、需要维修的房间 -灰色、开的是钟点房间-用一个钟的小图标放在上面>关键是那个表格要怎样做出来,步骤请详细说明。希望各位高手指点一二,小弟先拜谢。

解决方案 »

  1.   

    画不太合适吧,不同酒店房间数目,布局是不一样的。画死了就不通用了我建议搞自定义控件,拖到窗体上。或者通过配置文件加载到窗体上或者panel上
    控件的属性包括房态,比如干净的空房、脏的空房、脏房等等..用自定义控件程序也好管理。
      

  2.   

    用listview 的大图标表示.用房的状态控制大图标需要加载的图片
     listView1.LargeImageList=imageList1;
               listView1.ShowItemToolTips = true;
                ServerConfig sc = new ServerConfig(System.Windows.Forms.Application.StartupPath);
                List<XmlElement> list =sc.GetClient();
                
                foreach (XmlElement myele in list)
                {
                    ListViewItem mylvi = new ListViewItem();
                    mylvi.ImageIndex = 1;
                    mylvi.Text = myele.InnerText;
                    mylvi.Name = myele.GetAttribute("IP");
                    mylvi.ToolTipText = "  IP:"+myele.GetAttribute("IP")+"\n名称:"+myele.GetAttribute("Name");
                    listView1.Items.Add(mylvi);
                }以前写的一个小程序..从配置文件里得到需要的加载的图标个数 imageindex 就是imageList1的索引.在imageList1中放入你需要显示的图片状态 通过索引来选择你的状态
      

  3.   

    贴图的方式是不合适的,点击不同状态的房间要进行不同的操作。这个事件写在程序里,不如写在控件里。
    今后牵扯到房间扩展,拖动,布局变更,都是控件是最优选择。
    房间布局最好写在xml里。 一排几个房间,总共几排,多少个房间一个楼动态加载到窗体某个区域里
      

  4.   

    刚好前一段时间我做了个一 给你参考一下吧我是用 用Panel做容器,用label 做房间图标
    根据房间的状态(空房,维修...) 动态加载到panel里面部分代码:            #region 动态添加房间        #region 变量
            int dj;//可租单间数量
            int hb;//可租豪标数量
            int pb;//可租普标数量
            int tf;//可租套房数量
            int srj;//可租三人间数量
            int hys;//可租会议室数量        int zf ;//脏房数量
            int yzf;//已住房数量
            int kzf;//可租房数量
            int wxf;//维修房数量        Image kzfImage;//会议室可租房图片
            Image wxfImage;//会议室维修房图片
            Image yzfImage;//会议室已住房图片
            Image zfImage;//会议室赃房图片        Dictionary<string,Label> labels;//控件集合
            Dictionary<string, RoomInfo> DiRoomInfos;//房间集合
            //入住的房间
            List<Label> Rooms;
            //所有的入住登记信息
            List<HireRoomInfo> hireRoomInfos = (List<HireRoomInfo>)HireRoomInfoManager.GetAllHireRoomInfo();
            #endregion        /// <summary>
            /// 循环添加房间
            /// </summary>
            public void AddRoom(List<RoomInfo> roomInfos)
            {
                 dj = 0;//单间
                    hb = 0;//豪标
                    pb = 0;//普标
                    tf = 0;//套房
                    srj = 0;//三人间
                    hys = 0;//会议室                zf = 0;//脏房
                    yzf = 0;//已住房
                    kzf = 0;//可租房
                    wxf = 0;//维修房                wxfImage = UserHelper.EllipseImage(60, 50, Color.BlueViolet);
                    kzfImage = UserHelper.EllipseImage(60, 50, Color.Green);
                    zfImage = UserHelper.EllipseImage(60, 50, Color.LightSlateGray);
                    yzfImage = UserHelper.EllipseImage(60, 50, Color.DodgerBlue);
                    Rooms = new List<Label>();
                    DiRoomInfos = new Dictionary<string, RoomInfo>();
                    //排序房间
                    List<RoomInfo> tempRoomInfos = new List<RoomInfo>();
                   
                    for (int w = 0; w < roomInfos.Count; w++)
                    {
                        if (roomInfos[w].RoomType == "议会室")
                        {
                            tempRoomInfos.Add(roomInfos[w]);
                            roomInfos.RemoveAt(w);
                            w--;
                        }
                    }
                    roomInfos.Sort(new RoomIdComparer());
                    roomInfos.AddRange(tempRoomInfos);                Label lbl;
                    labels = new Dictionary<string, Label>() ;//房间控件集合
                    int j = 0;
                    int k = 0;
                    this.panel2.Hide();
                    this.panel2.Controls.Clear();
                    for (int i = 0; i < roomInfos.Count; i++)
                    {                    DiRoomInfos.Add(roomInfos[i].RoomId.ToString(), roomInfos[i]);                    lbl = new Label();                    if (roomInfos[i].RoomState == "可租房")
                        {
                            kzf++;
                            if (roomInfos[i].RoomType == "议会室")
                            {                            lbl.Image = kzfImage;
                            }
                            else
                            {
                                lbl.BackColor = Color.Green;
                            }
                            if (roomInfos[i].RoomType == "单间")
                            {
                                dj++;
                            }
                            if (roomInfos[i].RoomType == "豪标")
                            {
                                hb++;
                            }
                            if (roomInfos[i].RoomType == "普标")
                            {
                                pb++;
                            }
                            if (roomInfos[i].RoomType == "套房")
                            {
                                tf++;
                            }
                            if (roomInfos[i].RoomType == "三人间")
                            {
                                srj++;
                            }
                            if (roomInfos[i].RoomType == "议会室")
                            {
                                hys++;
                            }
                            lbl.Tag = roomInfos[i].RoomId;//房间号
                        }
                        else
                        {
                            if (roomInfos[i].RoomType == "议会室")
                            {
                                switch (roomInfos[i].RoomState)
                                {
                                    case "已住房":
                                        yzf++;
                                        lbl.Image = yzfImage;
                                        //已住房设置提示文本
                                        SetClewText(roomInfos, hireRoomInfos, lbl, i);
                                        break;
                                    case "维修房":
                                        wxf++;
                                        lbl.Image = wxfImage;
                                        lbl.Tag = roomInfos[i].RoomId;//房间号
                                        break;
                                    case "小脏房":
                                        zf++;
                                        lbl.Image = zfImage;
                                        lbl.Tag = roomInfos[i].RoomId;//房间号
                                        break;
                                }
                            }
                            else
                            {
                                switch (roomInfos[i].RoomState)
                                {
                                    case "已住房":
                                        yzf++;
                                        lbl.BackColor = Color.DodgerBlue;
                                        //已住房设置提示文本
                                        SetClewText(roomInfos, hireRoomInfos, lbl, i);
                                        break;
                                    case "维修房":
                                        wxf++;
                                        lbl.BackColor = Color.BlueViolet;
                                        lbl.Tag = roomInfos[i].RoomId;//房间号
                                        break;
                                    case "小脏房":
                                        zf++;
                                        lbl.BackColor = Color.LightSlateGray;
                                        lbl.Tag = roomInfos[i].RoomId;//房间号
                                        break;
                                }
                            }
                        }
                        lbl.AutoSize = false;
                        lbl.Font = new Font("宋体",9);
                        lbl.Location = new Point(2, 2);
                        lbl.Name = "lbl" + j.ToString() + "_" + (i + 1).ToString();
                        lbl.Size = new Size(60, 50);
                        lbl.ForeColor = Color.White;
                        lbl.Text = roomInfos[i].RoomId.ToString();//房间号
                        lbl.Text += "\r\n" + roomInfos[i].RoomType;//房间类型
                        lbl.TextAlign = ContentAlignment.MiddleCenter;
                        //确定位置
                        lbl.Location = new Point(2 + (k * 65), 2 + (j * 58));
                        //绑定到一个单击事件
                        lbl.Click += new System.EventHandler(lblBuy_Click);
                        //绑定到一个鼠标按下事件
                        lbl.MouseDown += new MouseEventHandler(lblBuy_MouseDown);
                        //绑定到一个右键菜单
                        lbl.ContextMenuStrip = this.cmsSetRoomState;
                        this.panel2.Controls.Add(lbl);
                        labels.Add(roomInfos[i].RoomId.ToString(),lbl);//加入集合中
                        k++;
                        if ((i + 1) % 10 == 0)
                        {
                            j++;
                            k = 0;
                        }                    //添加三个图片框到Label房间控件上
                        for (int h = 0; h < 3; h++)
                        {
                            PictureBox pic = new PictureBox();
                            pic.Size = new Size(12, 12);
                            pic.SizeMode = PictureBoxSizeMode.CenterImage;
                            pic.Name = i.ToString() + "_" + h.ToString();
                            if (h == 0)
                            {
                                pic.Location = new Point(2, 2);
                            }
                            if (h == 1)
                            {
                                pic.Location = new Point(46, 2);
                                pic.Name = "pic";                        }
                            if (h == 2)
                            {
                                pic.Location = new Point(2, 36);                        }
                            pic.BackColor = Color.Transparent;
                            //pic.BackColor = Color.Red;
                            lbl.Controls.Add(pic);
                        }
            } 
            #endregion源码下载