自定義床位分布圖-BedMap

認知尚淺,如有錯誤,愿聞其詳!

概述

??工作需要,需要個床位分布圖,我們做的是比較簡單的,沒有涉及到分樓層等一些復雜的業務,所以看起來這個控件會簡單點。目前業務需求也沒太多,就簡單的實現了換床等操作。后面會繼續完善。

基本構造

??控件基本實現并不難,對于初學者的我來說,也沒能去好好地關心性能問題,在加載幾百個床位的時候略顯吃力。畢竟是一次性全部加載,不過這個可以通過分段加載可以解決,后期業務需要就弄弄。
??以下是控件的基本構造:
??底層是UserControl,存儲床位的是FlowLayoutPanel控件,用于流式排布控件,然后為了使得床位具有一定屬性,再寫一個拓展Panel,作為床位。每個床位有Id、Code、患者信息等屬性,Panel內部由Label來展示文本(本來想用Graphics繪制的,這樣就不用控件事件繼承底層控件事件了,比如說點擊事件),需要圖形的也可以添加Picture控件,根據需求而定。床位的列數決定FlowLayoutPanel寬度,行數決定FlowLayoutPanel高度,高度適配是為了觸發UserControl的Scroll(開啟AutoScroll),以滿足滾動,外加ContextMenuStrip右鍵菜單,添加更多操作。

床位結構.png

控件內部實現
床位分布-基本實現.png

控件創建

        private void CreateBedsMap()
        {
            //添加床位
            List<BedPropOption> beds = new List<BedPropOption>();
            for (int i = 0; i < 12; i++)
            {
                BedPropOption bed = new BedPropOption();
                bed.BedId = i;
                bed.BedCode = $"{i}號";

                beds.Add(bed);
            }
            //添加右鍵菜單
            List<ToolStripItem> menus = new List<ToolStripItem>();
            ToolStripItem item_1 = new ToolStripMenuItem();
            item_1.Name = "轉床";
            item_1.Text = $"轉床";
            item_1.Click += new EventHandler(contextMenuStrip_ItemClick);
            menus.Add(item_1);
            for (int j = 0; j < 5; j++)
            {
                ToolStripItem item = new ToolStripMenuItem();
                item.Name = j.ToString();
                item.Text = $"功能{j}";
                item.Click += new EventHandler(contextMenuStrip_ItemClick);
                menus.Add(item);
            }

            cBedMapControl1.MouseToolMenu = menus;
            cBedMapControl1.Beds = beds;
        }
        /// <summary>
        /// 右鍵菜單工能
        /// </summary>
        private void contextMenuStrip_ItemClick(object sender, EventArgs e)
        {
            ToolStripItem item = sender as ToolStripItem;
            ContextMenuStrip contextMenu = item.GetCurrentParent() as ContextMenuStrip;//獲取菜單項父容器
            BedPanel bedPanel = contextMenu.SourceControl as BedPanel;//獲取觸發菜單控件
            switch (item.Name)
            {
                case "轉床":
                    break;
            }
        }

效果展示

有需要的可以聯系我,控件內部使用了一些私有模型,沒辦做成公有控件。


床位分布圖.gif
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。