C#基础(3)

2021-02-13 14:21

阅读:633

摘要:  基于.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 )
            {
                //截取文件夹路径的名称
                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 )
            {
                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一些有关的控件的使用还有很多,也很多比较重要的。不过之前打的代码也都看过了一遍。虽然记不住,但这东西应该不是靠记忆的。很多都是根据逻辑去使用,一个控件触发的事件,可以在事件的详细说明去了解,还有很多属性,都基本类似。

 


评论


亲,登录后才可以留言!