均匀间隔的网格,允许拖放

时间:2017-11-24 10:27:07

标签: c# winforms grid

我需要创建一个WinForm应用程序,允许用户从一组图像中拖动它们,并将它们放在网格上,这是一种各种各样的图块设计器。

我尝试过使用TableLayoutPanel,但是当你有一个100x100的网格时似乎变得相当慢,我只是想知道是否有任何替代方法允许用户拖动一个瓷砖在网格布局上,如果需要,可以扩展网格的大小。

谢谢。

1 个答案:

答案 0 :(得分:0)

如果瓷砖是连续的,您可以获得第一个"空单元格"

    private readonly Size tileSize = new Size(200, 200);
    private void button1_Click(object sender, EventArgs e)
    {
        var pb = new PictureBox();
        var pt = GetEmptyCell(tileSize);
        pb.Location = pt;
        pb.Size = tileSize;
        Controls.Add(pb);
    }

    private Point GetEmptyCell(Size TileSize)
    {
        var ctrl = GetChildAtPoint(new Point(0, 0));
        if (ctrl == null && TileSize.Width < Width && TileSize.Height < Height)
            return new Point(0, 0);

        for (int x = 0; x < Width; x++)
        {
            for (int y = 0; y < Height; y++)
            {
                ctrl = GetChildAtPoint(new Point(x, y));
                if (ctrl == null && x + TileSize.Width < Width && y + TileSize.Height < Height)
                    return new Point(x, y);

            }
        }

        throw new Exception("No Empty cells was found");
    }