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 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM