flowlayoutpanelコントロールにページング効果を実装するにはどうすればよいですか?
-
28-10-2019 - |
質問
次のコードのおかげで、サムネイルとして画像を作成して追加します。
実装は非常に簡単です。ディレクトリ内の利用可能な画像を読み、次のサブ手順を呼び出します。
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);
}
解決
プロセスをスピードアップするには、画像が読み込まれるとキャッシュすることができるため、必要なときにファイルストリームからロードする必要はありません。
明示的なコードはわかりませんが、一般的なプロセスは次のとおりです。
1)いくつかの変数を持つことができますが、最も重要なのは現在のページの整数です。
2)次に、定数または別の整数変数のいずれかで、各ページに表示されるサムネイルの数を定義する必要があります。このThumbsperpageと呼びましょう
3)イベントハンドラー(オンクリック、ホバーまたはその他のアクションイベントで、以下を実行します。
4)すべてのアイテムのフローパネルをクリアします。おそらくflowpanel.controls.items.clear()に似ています
5)次に、範囲内の特定のページの次の画像を追加します。
これは、画像インデックスで0から始まり、ページインデックスで1が起動していることを前提としています
例、ページごとに9画像:1ページ1に画像[0,8]が必要です[9,17]などが必要です。
したがって、コードでは、それは似ています
FlowPanel.Items.Clear()
for(int i = (currentPage-1) * thumbsPerPage; i < (currentPage * thumbsPerPage) - 1; i++)
FlowPanel.Controls.Add(Pedits[i])
最後に、コードをc#:)に変換します...要件ではありませんが、ユーザーはVB.netにない場合に一般的に支援することを喜んでいます