c# - 强制看不见的 PictureBox 加载图像

标签 c# picturebox

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

最佳答案

无论图片框可见性如何,您都可以通过调用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!");
}

关于c# - 强制看不见的 PictureBox 加载图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16646281/

相关文章:

c# - 如何在不创建覆盖 IsEnabledCore 的新类的情况下启用添加到 Richtextbox 的按钮?

c# - 如何启用对C :\home\site\wwwroot?中Azure函数使用的目录的读写访问

javascript - 如何将 JS 对象集合发送到 ASP.NET API 服务?

c++ - mfc图片控件多次运行后消失

c++ - 允许用户在 CStatic C++ MFC App 中绘制拖动矩形

c# - 在图片框控件中显示后处理位图

c# - 图片框相交

c# - GC如何清理结构?

c# - 我应该如何从屏幕空间坐标转换为 WinForms PictureBox 中的图像空间坐标?

c# - C# 中的字符串比较性能