Winforms 中表格布局的可滚动背景图像

Scrollable backgroundimage of a tablelayout in winforms

我有一个 10x10(列 x 行)的 table 布局,我可以 个对象放入这些单元格中。
我想向 table 布局添加一个图像(作为背景),该布局可以 滚动 并覆盖所有 table 单元格,用户可以上传任何图像尺寸。

drag/drop 正在工作,我的问题是:我无法滚动 table 背景图像 eventho 我将 AutoScroll 设置为 true。 知道如何解决这个问题

更新: 现在我可以滚动了,但是图片显示方式不对

private void addImage()
        {
            Image img = Image.FromFile(@"C:\Users\c1\Desktop\img_Clean.png");
            if (tableLayoutDropZone.BackgroundImage != null) tableLayoutDropZone.BackgroundImage.Dispose();
            tableLayoutDropZone.BackgroundImage = img;
            tableLayoutDropZone.AutoScrollPosition = Point.Empty;
            tableLayoutDropZone.AutoScrollMinSize = new Size(img.Width, img.Height);

        }

你需要做件事:

  • yourTLP.AutoScroll = true当然还有BackgroundImageLayout=None

  • 设置一个合适的AutoScrollMinSize;它应该与您用作 BackgroundImage 的图像大小相同,即当图像更改时您需要重置 AutoScrollMinSize

  • 您需要对 Paint 事件进行编码以包含此行:e.Graphics.DrawImage(yourTLP.BackgroundImage, yourTLP.AutoScrollPosition);

这是我加载新图像的代码:

Image img = Image.FromFile(someimagepath);
if (yourTLP.BackgroundImage != null) yourTLP.BackgroundImage.Dispose();
yourTLP.BackgroundImage = img;
yourTLP.AutoScrollPosition = Point.Empty;
yourTLP.AutoScrollMinSize = new Size(img.Width, img.Height);

请注意,当 TLP 滚动时,它所持有的控件 也会滚动!

如果您希望它们保持 固定,您可以这样做:

  • 删除以上所有设置和代码
  • 使用非常相同的设置和代码
  • 创建一个Panel
  • TLPBackColor 设置为 Transparent
  • 将其嵌套在 Panel

您可能需要打开 DoubleBuffering 以实现更流畅的滚动..