• 显示二维表格的位置计算


            private void button1_Click(object sender, EventArgs e)
            {
                Size BOX_SIZE = new Size(90, 60);
                Point START_TOP_LEFT = new Point(100, 100);
                int COUNT = 5;
    
                var floorList = new List<string>() { "1", "2", "3", "4", "5~6" };
                var floorDic = new Dictionary<string, List<string>>();
                floorDic.Add("5~6", new List<string>() { "501a", "502a", "503", "504", "505", "506", "507" });
                floorDic.Add("4", new List<string>() { "401", "402", "403", "404", "405"});
                floorDic.Add("3", new List<string>() { "301", "302", "303", "304", "305", "306", "307", "308", "309", "310", "311", "312", "313", "304", "315", "316" });
                floorDic.Add("2", new List<string>() { "201", "202", "203", "204", "205"});
                floorDic.Add("1", new List<string>() { "门房", "商1", "商2", "商3", "商4", "商5", "商6", "商7", "商8", "商9", "商10", "商11", "商12", "商13", "商14", "商15", "商16", "商17" });
    
                this.panel1.Controls.Clear();
                int x = 0;//格子x,y 的左上坐标
                int y = 0;
                int width = 0;//层格子的长、宽
                int height = 0;
                int lines_per_floor = 0;//每层实际占几行(占几个格子)
                int real_floor = 0;//实际占几层
                int idx_floor = 0;//层顺序
                int delta_height = 0;//层格子累加的减少高度
                int idx_room_x = 0;//指示当前X方向是第几个房间,用于扣减偏移量,每层清0、折行清0
                int idx_room_y = 0;//累积的房间格子的高度偏移量,不清0
                for (int i = floorList.Count - 1; i >= 0; i--)
                {
                    x = START_TOP_LEFT.X;
                    real_floor += lines_per_floor;
                    y = START_TOP_LEFT.Y + real_floor * BOX_SIZE.Height - delta_height;
                    y -= idx_floor;//每累加一层,所在y值-1,才能和上一个重合
    
                    width = BOX_SIZE.Width;
                    lines_per_floor = (int)Math.Ceiling((double)floorDic[floorList[i]].Count / COUNT);
                    delta_height += lines_per_floor - 1;
                    height = BOX_SIZE.Height * lines_per_floor - (lines_per_floor - 1);
                    //添加层格子
                    add_label_ctrl(x, y, new Size(width, height), floorList[i]);
    
                    idx_room_x = 0;
                    for (int j = 0; j < floorDic[floorList[i]].Count; j++)
                    {
                        //折行
                        if (j % COUNT == 0)
                        {
                            idx_room_x = 0;
                            idx_room_y++;
                        }
                        x = START_TOP_LEFT.X + BOX_SIZE.Width + BOX_SIZE.Width * (j % COUNT);//X坐标=开始偏移 + 层格式宽 + 当前几个房间格子宽,因为折行,所以取余
                        x -= (idx_room_x + 1);//扣减重叠的格子线像素
    
                        y = START_TOP_LEFT.Y + BOX_SIZE.Height * real_floor + BOX_SIZE.Height * (j / COUNT);//Y坐标=开始偏移 + 实际占用层数* 格子高 + 当前第几行 * 房间格子高。因为折行,所以取商
                        y -= idx_room_y - 1;//摔跟头重叠的格子线像素
                        //添加房间格子
                        add_label_ctrl(x, y, BOX_SIZE, floorDic[floorList[i]][j]);
    
                        idx_room_x++;                    
                    }
                    idx_floor++;
                }
    
    
            }
    
    
            void add_label_ctrl(int x, int y, Size size, string caption)
            {
                this.SuspendLayout();
                var lbl = new Label();
                lbl.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
                lbl.Location = new System.Drawing.Point(x, y);
                lbl.Name = Guid.NewGuid().ToString();
                lbl.Size = size;
                lbl.Text = caption;
                lbl.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
                this.panel1.Controls.Add(lbl);
                this.ResumeLayout();
            }
    

      

  • 相关阅读:
    七牛php-sdk使用
    七牛php-sdk使用-多媒体处理
    七牛php-sdk使用-文档处理
    七牛php-sdk使用-文件上传
    php爬取微信文章内容
    php解决微信文章图片防盗链
    python2.7编译安装升级python3并安装Scrapy
    centos7安装配置supervisor守护进程
    vuejs+thinkphp5+phpsocketIO+timer数据及时更新
    docker常用命令
  • 原文地址:https://www.cnblogs.com/yansc/p/10200577.html
Copyright © 2020-2023  润新知