Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否按需将图像加载到FlowLayoutPanel?_C#_Performance_Flowlayoutpanel - Fatal编程技术网

C# 是否按需将图像加载到FlowLayoutPanel?

C# 是否按需将图像加载到FlowLayoutPanel?,c#,performance,flowlayoutpanel,C#,Performance,Flowlayoutpanel,我想用许多图像(~400pc.,500x500px)填充flowlayoutpanel。 我循环浏览带有文件名的字符串列表,并将这些图片添加到flp中。 但超过200张图像时,面板不会显示更多图像 我认为这是一个性能问题,我想问,是否可以“按需”加载图像 比如滚动面板,只加载“可见”图像 对于面板填充,我使用以下方法: public void PanelFill(List<string> filenames) { try { int temp = 0;

我想用许多图像(~400pc.,500x500px)填充flowlayoutpanel。 我循环浏览带有文件名的字符串列表,并将这些图片添加到flp中。 但超过200张图像时,面板不会显示更多图像

我认为这是一个性能问题,我想问,是否可以“按需”加载图像

比如滚动面板,只加载“可见”图像

对于面板填充,我使用以下方法:

public void PanelFill(List<string> filenames)
{
    try
    {
        int temp = 0;
        foreach (string filename in filenames)
        {
            GC.Collect();
            PictureBox pic = new PictureBox
            {
                ClientSize = new Size(int_thumbWidth, int_thumbHeight),
                //Image = new Bitmap(filename),
                Tag = filename,
                BorderStyle = BorderStyle.FixedSingle
            };
            if ((pic.Image.Width > int_thumbWidth) ||
                (pic.Image.Height > int_thumbHeight))
            {
                pic.SizeMode = PictureBoxSizeMode.Zoom;
            }
            else
            {
                pic.SizeMode = PictureBoxSizeMode.CenterImage;
            }
            flowLayoutPanel_esww_bildvergleich.Invoke(new Action(() => { pic.Parent = flowLayoutPanel_esww_bildvergleich; }));
            pic.Click += PictureBox_Click;
            pic.DoubleClick += PictureBox_DoubleClick;
            pic.MouseUp += PictureBox_MouseUp;
            temp++;
        }
    }
    catch (OutOfMemoryException)
    {
        MessageBox.Show("Es wurden zu viele Fotos gefunden. Der Arbeitsspeicher ist nicht ausreichend. Bitte passen Sie Ihre Filter an.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
        str_aufnahmeTyp.Clear();
    }
    catch (Exception ex)
    {
        Fehlerbehandlung.Fehler(-1, ex.Message);
    }
}
public void PanelFill(列出文件名)
{
尝试
{
内部温度=0;
foreach(文件名中的字符串文件名)
{
GC.Collect();
PictureBox pic=新PictureBox
{
ClientSize=新尺寸(拇指宽度、拇指高度),
//Image=新位图(文件名),
Tag=filename,
BorderStyle=BorderStyle.FixedSingle
};
如果((pic.Image.Width>int_thumbWidth)||
(pic.Image.Height>int_thumbHeight))
{
pic.SizeMode=PictureBoxSizeMode.Zoom;
}
其他的
{
pic.SizeMode=PictureBoxSizeMode.CenterImage;
}
flowLayoutPanel_esww_bildvergleich.Invoke(新操作(()=>{pic.Parent=flowLayoutPanel_esww_bildvergleich;}));
pic.Click+=PictureBox\u Click;
pic.DoubleClick+=PictureBox\u DoubleClick;
pic.MouseUp+=PictureBox_MouseUp;
temp++;
}
}
捕获(OutOfMemoryException)
{
MessageBox.Show(“在任何情况下,用户都可以通过过滤器进行筛选。”,“Fehler”,MessageBoxButtons.OK,MessageBoxIcon.Error);
str_aufnahmeTyp.Clear();
}
捕获(例外情况除外)
{
Fehlerbehandlung.Fehler(-1,ex.Message);
}
}

我的一个解决方法是添加一个Scroll/MouseEnter-Eventhandler来捕获面板中的滚动。 在我使用的处理程序中。PerformLayout()

而且

        private void flowLayoutPanel_esww_bildvergleich_MouseEnter(object sender, EventArgs e)
    {
        flowLayoutPanel_esww_bildvergleich.Focus();
        flowLayoutPanel_esww_bildvergleich.PerformLayout();
    }
        private void flowLayoutPanel_esww_bildvergleich_MouseEnter(object sender, EventArgs e)
    {
        flowLayoutPanel_esww_bildvergleich.Focus();
        flowLayoutPanel_esww_bildvergleich.PerformLayout();
    }