强制未见的PictureBox加载图像

本文关键字:PictureBox 加载 图像 | 更新日期: 2023-09-27 18:14:27

我有一个表单,上面有许多PictureBoxes排列,不是所有的都同时显示在表单上(表单上有滚动条显示看不见的PictureBoxes)。他们的图像位置是互联网的url。我想在每个图像加载后将这些图像保存在本地,因此我挂钩到这些PictureBoxes的ContentLoaded事件。

问题是看不见的picturebox不加载图像,因此它们的图像不能保存,直到滚动表单使它们可见。但是我不能指望用户会一直滚动整个表单的内容。

有没有办法强制看不见的PictureBox加载它的图像?

谢谢。编辑:

你好,DmitryG,可能是问题是,我有我的PictureBoxes LoadAsync"加载图像"之前加载真正的内容。在代码中,如果添加

        pb.ImageLocation = "http://images.google.com.vn/intl/en_ALL/images/logos/images_logo_lg.gif";
        pb.LoadAsync();

之前的循环
        pb.ImageLocation ="https://www.google.com/images/srpr/logo4w.png";
        pb.LoadAsync();
然后加载表单,您将只看到7个消息框,而不是10个。这是因为3个PictureBoxes是隐藏的

强制未见的PictureBox加载图像

可以通过调用picturebox来执行图像加载,尽管picturebox是可见的。LoadAsync方法。当图像加载将完成PictureBox。LoadCompleted将被引发:

pictureBox1.LoadCompleted += pictureBox1_LoadCompleted;
pictureBox1.InitialImage = Image.FromFile(@"... path to waiting-to-load image ...");
pictureBox1.ImageLocation = <...path to image...>;
pictureBox1.LoadAsync(); // perform loading
void pictureBox1_LoadCompleted(object sender, AsyncCompletedEventArgs e) {
    // do something with loaded image
}

更新:自动滚动面板和5个图片框的示例代码。

panel1.AutoScroll = true;
panel1.Height = 1000;
for(int i = 0; i < 5; i++) {
    PictureBox pb = new PictureBox();
    pb.Dock = DockStyle.Top;
    pb.Height = panel1.Height/2;
    pb.WaitOnLoad = false;
    pb.InitialImage = Image.FromFile("WaitingToLoad.gif");
    pb.ImageLocation = @"https://www.google.com/images/srpr/logo4w.png";
    pb.LoadCompleted += pb_LoadCompleted;
    pb.Parent = panel1;
    pb.LoadAsync(); //<<<<<
}
//
void pb_LoadCompleted(object sender, AsyncCompletedEventArgs e) {
    MessageBox.Show("Load completed!");
}