0

画像のサムネイルを表示する小さなアプリケーションをプログラミングしています。表示されるすべての画像は同じディレクトリにあり、各画像はいくつかのラベルとチェックボックスを備えた独自のグループボックス内にあります。すべてのグループ ボックスがフローレイアウト パネルに追加されます。問題は、画像の量がかなり大きくなる可能性があることと、まだ表示されていない場合でもすべての画像を読み込むと、メモリ使用量/パフォーマンスが少し手に負えなくなることが懸念されます.

現在ユーザーに表示されている画像のみを読み込む方法はありますか? 私の最初の考えは、ボックスの場所を保存し、スクロール位置に応じてロードする画像を決定することです。または、ピクチャボックス/グループボックスが現在表示されているかどうかを判断する簡単な方法はありますか?

4

1 に答える 1

1

理想的には、1 つの画像を非表示にして他の画像を表示するのではなく、バッファ ロジックを作成する必要があります。画像を表示する前に画像をロードするいくつかのバッファを用意し、画像ごとに新しいセットを設定するよりも、画像を表示する実際のフィールドの数を固定する方がはるかに良い考えです。

ただし、ソリューションでそれが必要な場合は、カスタム ユーザー コントロールを作成してみてください。

次のようなことを試してください:

public class customUserControl : UserControl
{
    //Store image as a Uri rather than an Image
    private Uri StoredImagePath;
    public class PictureBoxAdv : PictureBox
    {
        public PictureBoxAdv()
        {
            this.VisibleChanged +=new EventHandler(VisibleChanged);
        }
    }
    public Uri Image
    {
        get { return StoredImagePath; }
        set
        {
            StoredImagePath = value;
            if (this.Visible && StoredImagePath != null)
            {
                this.Image = Image.FromFile(StoredImagePath.AbsolutePath);
            }
        }
    }
    public void VisibleChanged(object sender, EventArgs e)
    {
        //When becomes visible, restore image, invisible, nullify.
        if (this.Visible && StoredImagePath != null)
        {
            this.Image = Image.FromFile(StoredImagePath.AbsolutePath);
        }
        else
        {
            this.Image = null;
        }
    }
}
于 2012-02-04T09:34:18.730 に答える