强制看不见的PictureBox来加载图片

时间:2013-05-20 09:19:52

标签: c# picturebox

我有一个表单上有许多PictureBoxs排队,并不是所有的表单同时显示在表单上(表单上有滚动条,以显示看不见的PictureBoxes)。他们的图像位置是互联网URL。我想在每个图像加载后立即在本地保存这些图像,因此我挂钩到那些PictureBox的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个PictureBox。

1 个答案:

答案 0 :(得分:2)

您可以通过调用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!");
}
相关问题