摘要: 基于.Net Framework的winform开发,主要是关于为winform平台的一些控件的属性以及事件的使用。
涉及内容: 1、Directory类 2、文本对话框 3、选择字体和颜色对话框 4、Treeview的使用 5、进程以及多线程(线程池) 6、GDI绘图 7、自定义控件
1、Directory类
directory类是一个静态类,作用:操作文件夹。操作文件夹在项目中比较常用,比如涉及到文件的存储,需要判断文件夹是否存在,然后根据时间日期等创建文件夹
Directory.CreateDirectory(@"c:\a\b"); //创建文件夹 Directory.Delete(@"c:\Windows.old",true); //删除文件夹 Directory.Move(@"c:\a",@"C:\Users\xsh.cpp\Desktop\new"); //剪切文件夹 必须新建文件夹的名字 string[] path = Directory.GetFiles(@"C:\Users\xsh.cpp\Desktop\图像合成", "*.jpg"); //获得一个文件夹下的全部路径 按类挑选文件+ *.文件后缀 选类型文件 string[] paths = Directory.GetDirectories(@"C:\Users\xsh.cpp\Desktop\图像合成");//获取文件夹下的全部路径 Directory.Exists(@"c:\a\b") //判断文件夹是否存在
2、文本对话框
当需要上传或者打开本地某一个文件的时候,就会打开一个文本对话框,去选择文件。
a、打开文本对话框
using System.IO; OpenFileDialog open = new OpenFileDialog(); //创建对象 open.Title = "选择需要的文件"; //对话框标题 open.Multiselect = true; //对话框多选,也就是同时选择多个文件 open.InitialDirectory = @"C:\Users\xsh.cpp\Desktop"; //对话框的初始文件夹 open.Filter = "文本文件|*.txt|媒体文件|*.wav|图片文件|*.jpg|所有文件|*.*"; //可以选择的文件类型 open.ShowDialog(); //必要的 一定要有
b、保存文本对话框:选择保存路径
SaveFileDialog save = new SaveFileDialog(); //创建对象 save.Title = "请选择保存的路径:"; //对话框标题 save.InitialDirectory = @"C:\Users\xsh.cpp\Desktop"; //对话框默认位置 save.Filter = "文本文件|*.txt|所有文件|*.*"; //对话框文件类型 save.ShowDialog(); //打开对话框 后续写入的一些代码
3、选择字体和颜色对话框
有时候有改变选中字体或者字体颜色的需求,就需要运用可以改变字体或者颜色的对话框,然后去选择
FontDialog font = new FontDialog(); //创建对象 font.ShowDialog(); //打开对话框 richTextBox1.SelectionFont=font.Font; //为选中的文本更换字体 ColorDialog color = new ColorDialog(); //创建对象 color.ShowDialog(); richTextBox1.SelectionColor = color.Color; //为选中的文本更换字体颜色
4、viewtree的使用
TreeNodeCollection tc=treeView1.Nodes; tc.Add(根节点); //添加根节点 TreeNode tn=treeView1.SelectedNode; tn.Nodes.Add(子节点名称); //为选中的根节点添加子节点
TreeView、递归、文件处理(资料管理器)
声明TreeNodeCollection tc ①、获取路径下的所有文件夹名称:string [] path=Directory.GetDirectories(文件路径); ②循环数组,截取文件夹名称(单独名称) string dirName=Path.GetFileNameWithoutExtension(path[i]); ③加入TreeView, tc.Add(dirName); ④ 递归:以当前节点继续循环 -->代码: public static void LoadFile(string str, TreeNodeCollection tc) { //文件夹 string []temp= Directory.GetDirectories(str); for (int i = 0; i < temp.Length; i++) { //截取文件夹路径的名称 string dirName= Path.GetFileNameWithoutExtension(temp[i]); TreeNode tn= tc.Add(dirName); //以当前节点 LoadFile(temp[i],tn.Nodes); } //文件 string [] fileName= Directory.GetFiles(str); for (int i = 0; i < fileName.Length; i++) { string dirName = Path.GetFileNameWithoutExtension(fileName[i]); tc.Add(dirName); }
5、进程以及线程
a、进程:打开任务管理器就可以看到当前正在运行的一些进程,当然,进程可以在C#代码中打开或者关闭
using System.Diagnostics; Process.Start("notepad"); //通过进程打开记事本 Process.Start(@"C:\Users\xsh.cpp\Desktop\1.wav"); //通过线程打开指定文件 //获取当前程序运行的所有进程 Process ps = new Process(); Process[] pce = Process.GetProcesses(); pce[i].iKill(); //关闭进程
b、多线程
线程:一个项目中比较常用的东西,一个游戏,软件的运行,往往是多线程的。一个网站后台运行某些计算,可以开辟一个线程。winform默认为单线程。 例如,当执行计算的时候,不能够拖动窗体,如果另外开启一个线程,就解决了这个问题。 常例:边看书边听歌
简单运用:
using System.Threading; Thread td = new Thread(Test); //开辟一个线程 Test为一个方法 td.IsBackground = true; // //标记为后台进程:线程默认都是为前台线程,一个进程退出标志:所有前台线程都结束后 td.Start(); //让线程可以随时准备开始 在start()中传入方法的参数
Thread.Sleep(3000); //线程休眠3秒
线程池:
程池的线程本身都是后台线程线程池的优势:线程可以进行重用
启动一个线程:开辟内存空间。线程非常多的时候,操作系统花费大量时间用在线程切换
ThreadPool.QueueUserWorkItem(new WaitCallback(Target),a); //Target为要执行的方法, a为方法的参数 ThreadPool.QueueUserWorkItem(o => {}); //中间问lambda表达式, 常用法
比较详细的描述,做个标记↓↓
https://www.cnblogs.com/wwj1992/p/5976096.html
6、GDI绘图
GDI是Graphics Device Interface的缩写,含义是图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。
常用:绘制验证码
using System.Drawing; //绘图 : 笔 纸 绘图的对象 //创建GDI对象 Graphics g = this.CreateGraphics(); //创建画笔对象 Pen pen = new Pen(Brushes.Red); //创建两个点 两点确定一条直线 Point p1 = new Point(100,100); Point p2 = new Point(300, 350); //调用GDI对象进行画图 g.DrawLine(pen, p1, p2);
绘制验证码:
//产生随机数 Random r = new Random(); string str = null; for (int i = 0; i <6; i++) { str += r.Next(0,10).ToString(); }//创建GDI对象 Bitmap bit = new Bitmap(pictureBox1.Width, 300); //定义高度和宽度 Graphics g = Graphics.FromImage(bit); //验证码数字 for (int i = 0; i < 6; i++) { string[] font = { "宋体", "华文行楷", "黑体", "方正舒体", "方正姚体" }; Color[] color = { Color.Red, Color.Yellow, Color.Black, Color.Blue, Color.Green, Color.Pink }; // Brushes [] bus = {} Point p1 = new Point(i*40, 100); g.DrawString(str[i].ToString(), new Font(font[r.Next(0, 5)],100), new SolidBrush(color[r.Next(0,6)]), p1); } //绘制线 Pen pen = new Pen(Color.Green); for (int i = 0; i <30; i++) { Point p1 = new Point(r.Next(0, pictureBox1.Width), r.Next(100, 250)); Point p2 = new Point(r.Next(0, pictureBox1.Width), r.Next(100, 250)); g.DrawLine(pen,p1,p2); } //绘制点 for (int i = 0; i < 800; i++) { bit.SetPixel(r.Next(0, pictureBox1.Width), r.Next(100, 250), Color.Green); }
绘制验证码可以封装成一个类,然后需要的时候,传入相应的参数,则可以生成。
7、自定义控件
Button btn = new Button(); //创建一个按钮的对象 btn.Size btn.Location btn.BackColor //设置一些属性 this.Controls.Add(btn); //添加到窗体中(必须) btn.Click+=Btn_Click1 // +=后按两次Teb 键
小结:winform一些有关的控件的使用还有很多,也很多比较重要的。不过之前打的代码也都看过了一遍。虽然记不住,但这东西应该不是靠记忆的。很多都是根据逻辑去使用,一个控件触发的事件,可以在事件的详细说明去了解,还有很多属性,都基本类似。