1. 程式人生 > >Winform 圖片預覽列表+分頁顯示

Winform 圖片預覽列表+分頁顯示

     針對圖片列表展示資訊,一開始沒有做過相關類似的功能,大多都是以表格行顯示為主,所以剛開始實現這個功能的時候是懵逼的。無從下口。在網上搜索一時半會也沒找到合適的解決方案。大致就是類似於下圖這樣,每條資料上面是圖片,下面是對應的相關資訊,在介面上進行一次排列,在介面上分頁展示資料。這是X東的網站部分截圖,大致是這個樣子,只是這裡用winform窗體來實現。老大給我提供的思路和原始碼,將每條資料用使用者控制元件自定義設定好,然後將資料遍歷,依次賦值給該控制元件,給控制元件設定對應的位置Location 來顯示在Pannel上即可。這裡記錄一下

方法體傳入當前頁資料,遍歷每條資料的時候,先賦值圖片、列表資訊後,指定使用者控制元件位置,這裡唯一值得說的就是控制元件位置的賦值,稍稍改進了一下,很簡單,先將根據列表將每條資料的先x,y 的座標列出來,即很容易的找到規律。我這裡預設排版每行顯示5個,最大化後每行可顯示6個,所以是通過面板的寬度除以控制元件的寬度來獲取每行顯示的個數,根據面板寬度除以控制元件寬度的餘數減去滾動條的寬度(大約是18)的值除以每行顯示的個數來獲取列間距。

                //初始化控制元件大小
                mesCon.Size = new Size(149, 222);
                //控制元件位置【動態變化】             
                //列間隔 var temp = this.panel4.Width / 151;
                var Le = (panel4.Width % 149 - 18) / temp;
                //設定自定義控制元件的位置
                mesCon.Location 
= new Point(3 + (i % temp) * (149 + Le), 4 + (i / temp * 228)); //自定義控制元件新增到 主面板中 panel4.Controls.Add(mesCon);

 效果圖這裡就不貼上去了,能滿足功能,和上面截圖相似,只是沒這麼好看而已。 至於分頁,這裡是純手寫的,看起來雖然比較醜陋,但是可以滿足基本需求。

程式碼也一併貼上,很簡單,就是對當前頁碼數,總記錄數、當前頁資料的計算

        #region 分頁       
        //
上一頁 private void btn_last_Click(object sender, EventArgs e) { //獲取當前是頁的頁數 var intCount = Convert.ToInt32(txt_topage.Text); //獲取每頁顯示多少條 var Pagecount = Convert.ToInt32(cbx_pagecount.Text); if (intCount > 0 && intCount != 1) { var current = (Convert.ToInt32(txt_topage.Text) - 1) * Pagecount; var data = tempData.Skip(current - Pagecount).Take(Pagecount); panel4.Controls.Clear(); //當前頁數、總記錄數、當前頁資料 ShowData(current / Pagecount, tempData.Count, data.ToList()); } } //下一頁 private void btn_next_Click(object sender, EventArgs e) { var intCount = Convert.ToInt32(txt_topage.Text); var Pagecount = Convert.ToInt32(cbx_pagecount.Text); var allPage = tempData.Count % Pagecount == 0 ? tempData.Count / Pagecount : (tempData.Count / Pagecount) + 1; //判斷當前頁是否為最後一頁 if (intCount != allPage) { var current = Convert.ToInt32(txt_topage.Text) * Pagecount; var data = tempData.Skip(current).Take(Pagecount); panel4.Controls.Clear(); ShowData((current / Pagecount) + 1, tempData.Count, data.ToList()); } } //首頁 private void btn_first_Click(object sender, EventArgs e) { var currentPage = Convert.ToInt32(txt_topage.Text); var Pagecount = Convert.ToInt32(cbx_pagecount.Text); if (currentPage != 1) { var data = tempData.Skip(0).Take(Pagecount); panel4.Controls.Clear(); ShowData(1, tempData.Count, data.ToList()); } } //尾頁 private void btn_finish_Click(object sender, EventArgs e) { var currentPage = Convert.ToInt32(txt_topage.Text); var Pagecount = Convert.ToInt32(cbx_pagecount.Text); //總頁數 var allPage = tempData.Count % Pagecount == 0 ? tempData.Count / Pagecount : (tempData.Count / Pagecount) + 1; if (currentPage != allPage) { var data = tempData.Skip((allPage - 1) * Pagecount); panel4.Controls.Clear(); ShowData(allPage, tempData.Count, data.ToList()); } } //跳轉 private void btn_topage_Click(object sender, EventArgs e) { //驗證正則 var reg = @"^[1-9]\d*$"; var Pagecount = Convert.ToInt32(cbx_pagecount.Text); bool bol = Regex.IsMatch(txt_topage.Text, reg); if (bol) { var currPage = Convert.ToInt32(txt_topage.Text); var allPage = tempData.Count % Pagecount == 0 ? tempData.Count / Pagecount : (tempData.Count / Pagecount) + 1; //判斷當前頁是否大於 總共頁數 if (currPage > allPage) { //查詢最後一頁 var data = tempData.Skip((allPage - 1) * Pagecount); panel4.Controls.Clear(); ShowData(allPage, tempData.Count, data.ToList()); } else { //查詢跳轉所在的頁 var data = tempData.Skip((currPage - 1) * Pagecount).Take(Pagecount); panel4.Controls.Clear(); ShowData(currPage, tempData.Count, data.ToList()); } } } #endregion