一个tablelayout的可滚动的backgroundimage在winforms

时间:2017-07-27 09:36:43

标签: c# winforms tablelayout

我有一个10x10(列x行)的tablelayout,我可以删除对象到这些单元格中。
我想将图像(作为背景)添加到可以可滚动的tablelayout并覆盖所有表格单元格,用户可以上传任何图像大小。

拖放正在工作,我的问题是:我无法滚动tablebackgound图像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);

        }

1 个答案:

答案 0 :(得分:1)

你需要做三个的事情:

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

  • 设置合适的AutoScrollMinSize;它应与您用作BackgroundImage的图像具有相同的尺寸,即当图像发生变化时,您需要重置AutoScrollMinSize

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

enter image description here

以下是我加载新图片的代码:

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
  • BackColor的{​​{1}}设置为TLP
  • 将其嵌入Transparent

您可能需要打开Panel才能更顺畅地滚动..