2

次のコードのおかげで、画像を作成し、サムネイルとしてFlowLayoutPanelに追加します。

実装は非常に簡単です。ディレクトリ内の利用可能な画像を読み、次のサブプロシージャを呼び出します。

Private Sub LoadImages(ByVal FlowPanel As FlowLayoutPanel, ByVal fi As FileInfo)
        Pedit = New DevExpress.XtraEditors.PictureEdit
        Pedit.Width = txtIconsWidth.EditValue
        Pedit.Height = Pedit.Width / (4 / 3)
        Dim fs As System.IO.FileStream
        fs = New System.IO.FileStream(fi.FullName, IO.FileMode.Open, IO.FileAccess.Read)
        Pedit.Image = System.Drawing.Image.FromStream(fs)
        fs.Close()
        fs.Dispose()
        Pedit.Properties.SizeMode = DevExpress.XtraEditors.Controls.PictureSizeMode.Zoom

        If FlowPanel Is flowR Then
            AddHandler Pedit.MouseClick, AddressOf Pedit_MouseClick
            AddHandler Pedit.MouseEnter, AddressOf Pedit_MouseEnter
            AddHandler Pedit.MouseLeave, AddressOf Pedit_MouseLeave
        End If

        FlowPanel.Controls.Add(Pedit)
    End Sub

さて、拡張したいと思います。ページング効果を作成したいと思います。アプリケーションは利用可能なすべての画像を読み取る必要がありますが、画面に表示されている画像のみをペイントします。

そしていつものように、どこから始めればいいのかわかりません。ライトを使ってもらえますか?

...そしてC#バージョンが登場します!

private void LoadImages(FlowLayoutPanel FlowPanel, FileInfo fi)
{
    Pedit = new DevExpress.XtraEditors.PictureEdit();
    Pedit.Width = txtIconsWidth.EditValue;
    Pedit.Height = Pedit.Width / (4 / 3);
    System.IO.FileStream fs = null;
    fs = new System.IO.FileStream(fi.FullName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
    Pedit.Image = System.Drawing.Image.FromStream(fs);
    fs.Close();
    fs.Dispose();
    Pedit.Properties.SizeMode = DevExpress.XtraEditors.Controls.PictureSizeMode.Zoom;

    if (object.ReferenceEquals(FlowPanel, flowR)) {
        Pedit.MouseClick += Pedit_MouseClick;
        Pedit.MouseEnter += Pedit_MouseEnter;
        Pedit.MouseLeave += Pedit_MouseLeave;
    }

    FlowPanel.Controls.Add(Pedit);
}
4

1 に答える 1

1

プロセスを高速化するために、画像が読み込まれると、画像をキャッシュできるため、必要になるたびにファイルストリームから画像を読み込む必要がなくなります。

明示的なコードはわかりませんが、一般的なプロセスは次のとおりです。

1)いくつかの変数を持つことができますが、最も重要なのはcurrentPageの整数です。

2)次に、定数または別の整数変数のいずれかで、各ページに表示されるサムネイルの数を定義する必要があります。これをthumbsPerPageと呼びましょう

3)イベントハンドラー(OnClick、ホバー、またはその他の必要なアクションイベント)で、次の手順を実行します。

4)すべてのアイテムのFlowPanelをクリアします。おそらく、FlowPanel.Controls.Items.Clear()に似ています。

5)次に、範囲内の特定のページに次の画像を追加します:[(currentPage-1)* thumbsPerPage、(currentPage * thumbsPerPage)-1]

これは、画像インデックスが0、ページインデックスが1から始まることを前提としています。

たとえば、1ページあたり9枚の画像の場合:1ページ目に画像[0,8]が必要です。2ページ目に画像[9,17]が必要です。

したがって、コードでは次のようになります

FlowPanel.Items.Clear()
for(int i = (currentPage-1) * thumbsPerPage; i < (currentPage * thumbsPerPage) - 1; i++)
   FlowPanel.Controls.Add(Pedits[i])

最後に、コードをC#に変換します:)...必須ではありませんが、VB.NETにない場合、ユーザーは一般的にはるかに喜んで支援します

于 2011-02-02T22:03:31.637 に答える