C#编程学习41:C#成长之路【干货入门,绝对开卷有益】

目录

1 文件及文件夹系列

1.1 文件打开对话框

1.2 文件保存对话框

1.3 目录读取对话框

1.4 文本数据的读写

1.5 Path类与File类

1.6 DirectoryInfo类与Directory类

2 窗体控件的使用

2.1 splitContainer容器制作可伸缩界面

2.2 textBox拖拽功能的使用

2.3 DataGridView、MDB数据库

3 杂项

3.1 应用配置【大小图标、VS2015中英文界面变换及项目创建】

3.2 基础巩固

3.3 操作Excel

3.4 操作PDF

3.5 行业应用

3.6 其他应用


本文为C#系列的第41篇博文,学习C#一年来,经历了不少的挫折,也查询了不少的资料;虽然已经写了40篇博客,但仍然是处于初级阶段,学习的也不够系统。今天就借此机会学到的知识进行梳理,也分享给有兴趣的读者。

之前也写过几个总结的博文:

  • C#编程学习11:几个常用的操作总结
  • C#编程学习(04):基本操作学习总结

1 文件及文件夹系列

1.1 文件打开对话框

筛选拓展名、单选模式、记忆目录

            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "文本文档(.txt)|*.txt";
            //记住目录
            ofd.RestoreDirectory = true;
            //指定单选模式
            ofd.Multiselect = false;
           
            if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                string filePath = ofd.FileName;
            }

1.2 文件保存对话框

            SaveFileDialog sfd = new SaveFileDialog();
            sfd.RestoreDirectory = true;
            sfd.Filter = "文本文档|*.txt";
            if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                string dstFilePath = sfd.FileName;
            }

1.3 目录读取对话框

            FolderBrowserDialog fbd = new FolderBrowserDialog();
            fbd.Description = "对话框描述信息";
            
            if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                string dir = fbd.SelectedPath;
                
            }

1.4 文本数据的读写

指定输出文件的编码方式

StreamWriter s = new StreamWriter(address + "\\History.ini", true, Encoding.GetEncoding("GB2312"));//创建流写入器对象
s.WriteLine(openFileDialog1.FileName);//向文件中写入历史信息
s.Flush();//将信息压入流
s.Close();//关闭流

读取数据的两种方式:

//方式一:逐行读取
StreamReader sr = new StreamReader(address + "\\History.ini", ,Encoding.GetEncoding("gb2312"));//确保中文文本可被识别
while (sr.Peek()>=0)//循环读取流中文本
{
    string data = sr.ReadLine());
}
sr.Close();
//方式二:一次性读读取所有行
string[] allLines = System.IO.File.ReadAllLines(filePath);

1.5 Path类与File类

path类方法及属性

string fileExtend = System.IO.Path.GetExtension(strPath);//得到路径的拓展名
            string fileNameE = System.IO.Path.GetFileName(strPath);//得到带拓展名的文件名称
            string fileName = System.IO.Path.GetFileNameWithoutExtension(strPath);//无拓展名裸文件名
            string fullName = System.IO.Path.GetFullPath(strPath);//得到完整的文件路径
            string dirName = System.IO.Path.GetDirectoryName(strPath);//得到目录名
            string rndName = System.IO.Path.GetRandomFileName();//随机路径名

File类关键方法及属性

            bool isExist = System.IO.File.Exists(strPath);//判断存在性
            string access = System.IO.File.GetAccessControl(strPath).ToString() ;//得到权限
            string creatTime = System.IO.File.GetCreationTime(strPath).ToString();
            string lastWriteTime = System.IO.File.GetLastWriteTime(strPath).ToString();
            //System.IO.File.Move(srcFile, dstFile);
            //System.IO.File.Copy(srcFile, dstFile, isOverwrite);
            //System.IO.File.Create(fileName);
            //System.IO.File.Delete(fileName);

 

1.6 DirectoryInfo类与Directory类

可用用于获取文件大小信息,详见C#编程学习26: 获取指定文件或文件夹的大小和占用空间

Directory是一个静态类,不可实例化;DirectoryInfo可以实例化对象

 //GetCurrentDirectory:获取应用程序的当前文件目录
            string str2 = Directory.GetCurrentDirectory();
            //GetDirectoryRoot:获取指定目录中所有子目录的根目录
            string str2Root = Directory.GetDirectoryRoot(str2);
            bool str2Exists = Directory.Exists(str2);//目录存在性
            string dirCreatTime = Directory.GetCreationTime(dirName).ToString();//得到目录创建时间
            string[] getAllsons = Directory.GetDirectories(dirName);//得到当前目录的子目录
            //Directory.Move(srcDir, dstDir);//目录移动
            //Directory.CreateDirectory(dirName);//目录创建
            //Directory.Delete(dirName);//目录删除
            
            DirectoryInfo dir = new DirectoryInfo(dirName);
            //bool exits = dir.Exists;//是否存在
            //dir.Create();//创建目录,不存在就创建时使用          
            //dir.Delete();//删除目录
            
            string dirExtend = dir.Extension;
            string dirFullName = dir.FullName;
            DirectoryInfo[] dirDirs = dir.GetDirectories();
            FileInfo[] dirFiles = dir.GetFiles();
            //dir.MoveTo(dstDir);//移动到
            string instanceName = dir.Name;
            DirectoryInfo dirFather = dir.Parent;
            DirectoryInfo dirRoot = dir.Root;

迭代获取指定目录下满足特定要求的文件

        /// 
        /// 根据文件拓展名筛选满足要求的文件
        /// 
        /// 
        /// 
        /// 
        private void getFileNameByExtend(string dir, List selFileNames, string fileExtend)
        {
            string[] fileNames = Directory.GetFiles(dir).Where(x => x.EndsWith(fileExtend)).ToArray();
            foreach (string str in fileNames)
            {
                selFileNames.Add(str);
            }
            DirectoryInfo[] directs = new DirectoryInfo(dir).GetDirectories();
            foreach (DirectoryInfo dr in directs)
            {
                getFileNameByExtend(dr.FullName, selFileNames, fileExtend);
            }
        }      

应用示例:

C#编程学习13:文件及文件夹检索与拷贝

C#编程学习34:同名不同后缀文件归并到以该名称为父目录的路径下

2 窗体控件的使用

2.1 splitContainer容器制作可伸缩界面

之前的博文:

C#编程学习28:输入输出型软件界面设计与思考

C#编程学习29:制作可伸缩显示的软件界面

上述两个博文考虑的过于复杂,计算宽度和高度自己都迷糊了,其实可以简化为如下版本:

        private void sonFrmcs_Load(object sender, EventArgs e)
        {
            flowLayoutPanel1.Width = this.Width;
            flowLayoutPanel1.Height = this.Height;
            splitContainer1.Width = this.Width;
            splitContainer1.Height = this.Height;
            splitContainer1.Panel2Collapsed = true;
        }

        private void btnShowHelp_Click(object sender, EventArgs e)
        {
            if (btnShowHelp.Text == "展开帮助")
            {
                btnShowHelp.Text = "隐藏帮助";
                splitContainer1.Panel2Collapsed = false;
            }
            else
            {
                btnShowHelp.Text = "展开帮助";
                splitContainer1.Panel2Collapsed = true;
            }
        }

2.2 textBox拖拽功能的使用

一个属性:设置AllowDrop为true

两个事件:DragEnter获取鼠标的拖拽效果;DragDrop鼠标拖拽之后的赋值结果

        private void textBox1_DragEnter(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                e.Effect = DragDropEffects.Link;
            }
            else
            {
                e.Effect = DragDropEffects.None;
            }
        }

        private void textBox1_DragDrop(object sender, DragEventArgs e)
        {
            textBox1.Text = ((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString();
        }

也为文本框添加鼠标驻留弹出气泡显示文本内容功能

2.3 DataGridView、MDB数据库

  • DataGridView控件的宽度由行头宽度 【RowHeadersWidth】和内容宽度【Columns[i].Width】构成
        //注意列数不能为空,需要预先指定列;此函数可保证控件内容充满整个控件
        void setDgvWidth(DataGridView dgv)
        {
            dgv.Width = this.Width;
            for (int i = 0; i < dgv.ColumnCount; i++)
            {
                dgv.Columns[i].Width = (dgv.Width - dgv.RowHeadersWidth) / dgv.ColumnCount;
            }
        }
  • 禁止用户操作【AllowUser开头的属性】可以消除控件最后一个空行,没有列全
            dataGridView1.AllowUserToAddRows = false;
            dataGridView1.AllowUserToDeleteRows = false;
            dataGridView1.AllowUserToOrderColumns = false;
  • 标记行号
        private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
        {
            SolidBrush sb = new SolidBrush(dataGridView1.RowHeadersDefaultCellStyle.BackColor);
            e.Graphics.DrawString((e.RowIndex + 1).ToString(), this.dataGridView1.DefaultCellStyle.Font, sb,
                e.RowBounds.Location.X + 5, e.RowBounds.Location.Y + 5);
        }

应用示例

C#编程学习18:使用多文档窗体框架利用DataGridView对Access数据表进行增删改及导出excel操作

C#编程学习(20):对比两个mdb文件的图层包含的要素数目是否一致

C#编程学习36:操作SqlSevrer数据库

C#编程学习35:对MDB数据库的操作

3 杂项

3.1 应用配置【大小图标、VS2015中英文界面变换及项目创建】

C#编程学习09:vs2015的windows窗体应用程序创建及英文界面变换为中文界面的方法

C#编程学习19:mdi窗体中子窗体不能重复打开的三种实现方式

C#学习笔记25: 控制台应用程序开发精讲

C#编程学习38:自定义控件--组合控件

C#编程学习39:窗体间参数传递

3.2 基础巩固

C#编程学习(04):基本操作学习总结

C#编程学习14:Parrallel.For与for循环的处理效率分析

C#编程学习17:类与对象学习小结

C#学习笔记22: 面向对象编程入门精讲

C#编程学习23:internal关键字的使用

3.3 操作Excel

C#编程学习21:修改excel的数据项

C#编程学习27: C#操作Excel从入门到精通

3.4 操作PDF

C#编程学习08:Spire Pdf组件的引用,以国际知名期刊OR为例

3.5 行业应用

  • C#编程学习(01):北斗时转日历时的小程序
  • C#编程练习(02):大地坐标系(LBH)向空间直角坐标系(XYZ)的转换及其逆转换
  • C#编程练习(03):北斗时间系统、GPS时间系统及其与UTC时间系统之间的转换
  • C#编程学习(05):使用webbroswer控件显示地图并标注点位坐标
  • C#编程学习(06):使用百度API进行路径规划
  • C#编程学习10:ArcGIS、ArcEngine安装简要教程及C#程序创建;更详细的C#+ArcEngine二次开发参见个人专栏基于C#的ArcEngine二次开发

3.6 其他应用

C#编程学习40:批量下载HTML页面到本地

C#编程学习30:仿Notepad++记事本开发实战

C#编程学习16:清除access中某个数据表的所有数据并重置ID从1自增

C#编程学习15:应用程序帮助文档(chm/pdf)制作与C#调用

C#编程学习(07):自动监测大写键是否被锁定


如果喜欢我的分享,可关注以下两个公众帐号

C#编程学习41:C#成长之路【干货入门,绝对开卷有益】_第1张图片

C#编程学习41:C#成长之路【干货入门,绝对开卷有益】_第2张图片

 

 

你可能感兴趣的:(C#编程学习)