C# winfrom 遍历文件,并分页展示

一、遍历文件

1.遍历文件,得到文件名

/*遍历文件夹*/
        public static string[] GetFilePath(string folderPath)
        {
            if (Directory.Exists(folderPath))
            {
                DirectoryInfo folder = new DirectoryInfo(folderPath);
                FileInfo[] files = folder.GetFiles();
                ArrayList list = new ArrayList();
                foreach (var file in files)
                {
                    Console.WriteLine(file.Name);
                    list.Add(file.Name);
                }
                string[] result = list.ToArray(typeof(string)) as string[];
                return result;
            }
            else
            {
                MessageBox.Show("未找到路径");
                return null;
            }
        }

2.调用遍历文件方法

string folderPath;//文件路径
// 调用遍历文件方法
folderPath = "E:/文件集";
string[] files = GetFilePath(folderPath);

二、分页展示

1.由于我是要根据展示的文件名称再进入下一级播放,所以用的是Button,以每页展示6个为例,布局如下,注意Button布局排列之前先铺一层Panel作为容器。

封装6个Button排列布局:

 private void LayoutForm(string[] files)
        {
            // 这里Panel做清除是为了下一页展示不重复
            if (panel1.Controls != null)
            {
                panel1.Controls.Clear();
            }

            for (int i = 0; i < 2; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    Button btn = new Button();
                    if ((i + j + 2 * i) < files.Length)
                    {
                        btn.Text = files[i + j + 2 * i];
                    }
                    else
                    {
                        break;
                    }
                    btn.Click += new System.EventHandler(this.btn_Click);
                    btn.Size = new Size(410, 290);
                    btn.Location = new Point(450 * j, 327 * i);
                    btn.Image = global::HBDTWindowsFormsApp.Properties.Resources.bg1;
                    btn.ForeColor = Color.Transparent;
                    btn.Font = new Font("Arial", 30, FontStyle.Bold);
                    btn.BackColor = Color.Transparent;
                    btn.FlatAppearance.MouseDownBackColor = Color.Transparent;
                    btn.FlatAppearance.MouseOverBackColor = Color.Transparent;
                    btn.FlatAppearance.BorderSize = 0;
                    btn.FlatAppearance.BorderColor = Color.FromArgb(0, 0, 0, 0);
                    btn.FlatStyle = FlatStyle.Flat;
                    panel1.Controls.Add(btn);
                }

            }
        }

调用布局:

int pageCurrent;  //当前页
pageCurrent = 1;
LayoutForm(files);
// 显示页码
label1.Text = pageCurrent.ToString();

2.下一页:如果文件的总数量>6,那就要分多页展示。

                思路:根据当前页码,在文件名数组里面按下标取值,例如,第1页取下标为0-5的数组数据,第2页取下标为6-11的数组数据……以此类推。

int pageSize = 6; //每页大小

获取总页数:

 public  int getPageCount(Array array)
        {
            int pages = array.Length % pageSize == 0 ? (array.Length / 6) : ((array.Length / 6) + 1);
            return pages;
        }

下一页:

private void button5_Click(object sender, EventArgs e)
        {
            // 下一页
            string[] allFile = GetFilePath(folderPath);
            int length1 = allFile.Length;
            var pages = getPageCount(allFile);
            ArrayList list = new ArrayList();

            if (pageCurrent >= pages)
            {
                MessageBox.Show("已是最后一页");
            }
            else
            {

                pageCurrent++;
                label1.Text = pageCurrent.ToString();// 显示页码

                int start = (pageCurrent - 1) * 6;
                int end = pageCurrent * 6 ;
                if (end > length1)
                {
                    end = length1;
                }
                for (int i = start; i < end; i++)
                {
                    list.Add(allFile[i]);
                    Console.WriteLine("下一页数据:");
                    Console.WriteLine(allFile[i]);

                }
                string[] arr = list.ToArray(typeof(string)) as string[];
                Console.WriteLine(arr);
                LayoutForm(arr);

            }

        }

3.返回上一页:思路同上一页,只不过是pageCurrent--。

 private void button4_Click(object sender, EventArgs e)
        {
            // 返回上一页
            if (pageCurrent == 1)
            {
                MessageBox.Show("已经在第一页");
            }
            else {
                pageCurrent--;
                label1.Text = pageCurrent.ToString();

                string[] allFile = GetFilePath(folderPath);
                int length1 = allFile.Length;
                int start = (pageCurrent - 1) * 6;
                int end = pageCurrent * 6 ;
                ArrayList list = new ArrayList();


                if (end > length1)
                {
                   end = length1;
                }
                for (int i = start; i< end; i++)
                {
                    list.Add(allFile[i]);
                    Console.WriteLine("返回上一页数据:");
                    Console.WriteLine(allFile[i]);
                }
           
                string[] arr = list.ToArray(typeof(string)) as string[];
                LayoutForm(arr);
             }
        }

4.如果想根据文件名点击进入查看文件界面,拼接文件路径进入下一页就可以了。

// 拼接文件路径
Button button = sender as Button;
string fullPath = folderPath + "/" + button.Text;
// 获取文件路径的扩展名
string extension = Path.GetExtension(fullPath);

// 进入下一页查看,并把文件路径传过去
ShowForm showForm = new ShowForm(fullPath);
ShowForm .Show();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值