我从数据库中获取图像,并将它们作为列表传递给窗体,在窗体中创建一个面板。我还创建了一个PictureBox,并根据列表中的图片数量将它们添加到面板中(在我的例子中,我从数据库中加载了120张图片,大小为800 x 600)。在窗口大小的正常形式中,这是根据FormWindowState.Normal,我在面板中只有54张图片,但是如果我用鼠标单击来展开窗口,这对应于FormWindowState.Maximized,滚动条继续并且所有的图片都显示出来。在这个操作之后,我返回到窗口的正常状态,这对应于FormWindowState.Normal,现在所有的图片都可见并且我可以滚动它们。
此外,如果我将所有图片的大小设置为200x200,那么我也可以同时看到它们,但问题是,我需要显示大小正好为800x600的图片。
如何使整个收藏集在正常窗口状态下一次显示,并具有滚动功能。
public partial class ShowReferences
{
private List<Image> imagesCollection;
private Panel panelToShow;
public ShowReferences(List<Image> images)
{
InitializeComponent();
imagesCollection = images;
panelToShow = new Panel();
panelToShow.AutoScroll = true;
panelToShow.Dock = DockStyle.Fill;
Controls.Add(panelToShow);
for (int i = 0; i < this.imagesCollection.Count; i++)
{
PictureBox pictureBox = new PictureBox();
pictureBox.Image = this.imagesCollection[i];
pictureBox.SizeMode = PictureBoxSizeMode.AutoSize;
pictureBox.Location = new Point(0, i * pictureBox.Height);
this.panelToShow.Controls.Add(pictureBox);
}
}
}
我还记下了滚动元素的值,当窗口调整大小时,据我所知,错误最有可能出现在它们的值中,但由于某些原因,我无法手动设置它们
操作:当使用元素填充面板时窗口状态:正常===================== 2023年2月23日16:31:31
panelToShow.AutoScrollMargin :{Width=0, Height=0}
panelToShow.AutoScrollMinSize :{Width=0, Height=0}
panelToShow.AutoScrollOffset :{X=0,Y=0}
panelToShow.AutoScrollPosition :{X=0,Y=0}
panelToShow.HorizontalScroll.Value :0
panelToShow.HorizontalScroll.Maximum :100
panelToShow.HorizontalScroll.Minimum :0
panelToShow.HorizontalScroll.LargeChange :10
panelToShow.HorizontalScroll.SmallChange :1
panelToShow.VerticalScroll.Value :0
panelToShow.VerticalScroll.Maximum :100
panelToShow.VerticalScroll.Minimum :0
panelToShow.VerticalScroll.LargeChange :10
panelToShow.VerticalScroll.SmallChange :1
Action: Change window state size. Window state :Maximized=======================23.02.2023 16:31:34
panelToShow.AutoScrollMargin :{Width=0, Height=0}
panelToShow.AutoScrollMinSize :{Width=0, Height=0}
panelToShow.AutoScrollOffset :{X=0,Y=0}
panelToShow.AutoScrollPosition :{X=0,Y=-32591}
panelToShow.HorizontalScroll.Value :0
panelToShow.HorizontalScroll.Maximum :799
panelToShow.HorizontalScroll.Minimum :0
panelToShow.HorizontalScroll.LargeChange :583
panelToShow.HorizontalScroll.SmallChange :5
panelToShow.VerticalScroll.Value :32591
panelToShow.VerticalScroll.Maximum :66384
panelToShow.VerticalScroll.Minimum :0
panelToShow.VerticalScroll.LargeChange :793
panelToShow.VerticalScroll.SmallChange :5
Action: Change window state size. Window state :Normal=======================23.02.2023 16:31:36
尝试重绘窗体和元素本身,并手动设置滚动元素的值
1条答案
按热度按时间ocebsuys1#
请改用FlowLayoutPanel。根据需要设置
FlowDirection
(TopDown
)并向其添加控件。控件将自动定位(忽略Location
属性)。将AutoScroll
设置为true
以获得滚动条。将WrapContents
设置为false
以使其行为类似于ListBox
。可以设置添加的控件的
Margin
属性以调整其间距。一个很酷的技巧是使用
CheckBox
并将Appearance
属性设置为Button
,而不是PicturBox
。这样可以选择图像。可以将图像分配给BackgroundImage
属性并选择适当的BackGroundImageLayout
值(例如Zoom
)。或者,您也可以设置
Image
属性,但它没有Layout属性,这样图像将始终以未缩放和未拉伸的方式显示。但它的优点是,您可以使用TextImageRelation
属性在图像下方添加文本。如果你把盒子做得比图片大一点,你会更好地看到
CheckedBackColor
。你可以在使用Flat
外观时设置那个。