winforms 不要滚动并显示面板中的所有图片框

uyhoqukh  于 2023-02-24  发布在  其他
关注(0)|答案(1)|浏览(160)

我从数据库中获取图像,并将它们作为列表传递给窗体,在窗体中创建一个面板。我还创建了一个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

尝试重绘窗体和元素本身,并手动设置滚动元素的值

ocebsuys

ocebsuys1#

请改用FlowLayoutPanel。根据需要设置FlowDirectionTopDown)并向其添加控件。控件将自动定位(忽略Location属性)。将AutoScroll设置为true以获得滚动条。将WrapContents设置为false以使其行为类似于ListBox
可以设置添加的控件的Margin属性以调整其间距。
一个很酷的技巧是使用CheckBox并将Appearance属性设置为Button,而不是PicturBox。这样可以选择图像。可以将图像分配给BackgroundImage属性并选择适当的BackGroundImageLayout值(例如Zoom)。
或者,您也可以设置Image属性,但它没有Layout属性,这样图像将始终以未缩放和未拉伸的方式显示。但它的优点是,您可以使用TextImageRelation属性在图像下方添加文本。
如果你把盒子做得比图片大一点,你会更好地看到CheckedBackColor。你可以在使用Flat外观时设置那个。

相关问题