• C#基础(3)


    摘要:  基于.Net Framework的winform开发,主要是关于为winform平台的一些控件的属性以及事件的使用。

    涉及内容:  1、Directory类         2、文本对话框       3、选择字体和颜色对话框      4、Treeview的使用        5、进程以及多线程(线程池)             6、GDI绘图         7、自定义控件

    1、Directory类

    directory类是一个静态类,作用:操作文件夹。操作文件夹在项目中比较常用,比如涉及到文件的存储,需要判断文件夹是否存在,然后根据时间日期等创建文件夹

    Directory.CreateDirectory(@"c:a");    //创建文件夹
    Directory.Delete(@"c:Windows.old",true);  //删除文件夹
    Directory.Move(@"c:a",@"C:Usersxsh.cppDesktop
    ew");  //剪切文件夹 必须新建文件夹的名字
    string[] path = Directory.GetFiles(@"C:Usersxsh.cppDesktop图像合成", "*.jpg");     //获得一个文件夹下的全部路径   按类挑选文件+  *.文件后缀 选类型文件
    string[] paths = Directory.GetDirectories(@"C:Usersxsh.cppDesktop图像合成");//获取文件夹下的全部路径
    Directory.Exists(@"c:a")   //判断文件夹是否存在

    2、文本对话框

    当需要上传或者打开本地某一个文件的时候,就会打开一个文本对话框,去选择文件。

    a、打开文本对话框

    using System.IO;
    OpenFileDialog open = new OpenFileDialog(); //创建对象
    open.Title = "选择需要的文件";                         //对话框标题
    open.Multiselect = true;                               //对话框多选,也就是同时选择多个文件
    open.InitialDirectory = @"C:Usersxsh.cppDesktop";    //对话框的初始文件夹
    open.Filter = "文本文件|*.txt|媒体文件|*.wav|图片文件|*.jpg|所有文件|*.*";  //可以选择的文件类型
    open.ShowDialog();               //必要的  一定要有

    b、保存文本对话框:选择保存路径

    SaveFileDialog save = new SaveFileDialog(); //创建对象
    save.Title = "请选择保存的路径:";            //对话框标题
    save.InitialDirectory = @"C:Usersxsh.cppDesktop";           //对话框默认位置
    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:Usersxsh.cppDesktop1.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一些有关的控件的使用还有很多,也很多比较重要的。不过之前打的代码也都看过了一遍。虽然记不住,但这东西应该不是靠记忆的。很多都是根据逻辑去使用,一个控件触发的事件,可以在事件的详细说明去了解,还有很多属性,都基本类似。

  • 相关阅读:
    【C++ OpenGL ES 2.0编程笔记】8: 使用VBO和IBO绘制立方体 【转】
    顶点缓存对象(VBO)【转】
    CompileGLShader
    VR虚拟现实的工作原理,你知道多少?【转】
    VR/AR工作原理、目前存在的技术问题
    Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'
    nginx配置用户认证
    恢复阿里云RDS云数据库MySQL的备份文件到自建数据库
    阿里云rds linux平台使用wget 工具下载备份与日志文件
    screen 命令使用及示例
  • 原文地址:https://www.cnblogs.com/xsh-cs/p/8457693.html
Copyright © 2020-2023  润新知