自定义床位分布图-BedMap

2019-10-16  本文已影响0人  Memoyu

认知尚浅,如有错误,愿闻其详!

概述

  工作需要,需要个床位分布图,我们做的是比较简单的,没有涉及到分楼层等一些复杂的业务,所以看起来这个控件会简单点。目前业务需求也没太多,就简单的实现了换床等操作。后面会继续完善。

基本构造

  控件基本实现并不难,对于初学者的我来说,也没能去好好地关心性能问题,在加载几百个床位的时候略显吃力。毕竟是一次性全部加载,不过这个可以通过分段加载可以解决,后期业务需要就弄弄。
  以下是控件的基本构造:
  底层是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
上一篇 下一篇

猜你喜欢

热点阅读