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
- 将
TLP
的 BackColor
设置为 Transparent
- 将其嵌套在
Panel
您可能需要打开 DoubleBuffering
以实现更流畅的滚动..
我有一个 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 滚动时,它所持有的控件 也会滚动!
如果您希望它们保持 固定,您可以这样做:
- 删除以上所有设置和代码
- 使用非常相同的设置和代码 创建一个
- 将
TLP
的BackColor
设置为Transparent
- 将其嵌套在
Panel
Panel
您可能需要打开 DoubleBuffering
以实现更流畅的滚动..