zoukankan      html  css  js  c++  java
  • 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一些有关的控件的使用还有很多,也很多比较重要的。不过之前打的代码也都看过了一遍。虽然记不住,但这东西应该不是靠记忆的。很多都是根据逻辑去使用,一个控件触发的事件,可以在事件的详细说明去了解,还有很多属性,都基本类似。

  • 相关阅读:
    【Azure 应用服务】在Azure App Service多实例的情况下,如何在应用中通过代码获取到实例名(Instance ID)呢?
    【Azure 应用服务】App Service For Windows 中如何设置代理实现前端静态文件和后端Java Spring Boot Jar包
    【Azure Developer】使用Azure Key Vault 的Key签名后,离线验证的一些参考资料
    【Azure Function】调试 VS Code Javascript Function本地不能运行,报错 Value cannot be null. (Parameter 'provider')问题
    【Azure 应用服务】App Service 使用Tomcat运行Java应用,如何设置前端网页缓存的相应参数呢(Xms512m Xmx1204m)?
    【Azure API 管理】APIM添加Logtoeventhub的策略后,一些相关APIM与Event Hub的问题
    【Azure API 管理】为调用APIM的请求启用Trace 调试APIM Policy的利器
    【Azure 事件中心】China Azure上是否有Kafka服务简答
    【Azure 应用服务】探索在Azure上设置禁止任何人访问App Service的默认域名(Default URL)
    【Azure 微服务】记一次错误的更新Service Fabric 证书而引发的集群崩溃而只能重建
  • 原文地址:https://www.cnblogs.com/xsh-cs/p/8457693.html
Copyright © 2011-2022 走看看