• C#基础笔记(第十五天)


    1.Directory
    //File 文件
    Path 路径
    FileStream StreamReader StreamWriter 流
    Directory 文件夹 目录

    //创建文件夹
    Directory.CreateDirectory(@"C:a");
    Console.WriteLine("创建成功");
    Console.ReadKey();

    //删除文件夹,文件夹若不是空的,会抛异常,需要再后面加,true强行删除
    Directory.Delete(@"c:a",true);
    Console.WriteLine("删除成功");
    Console.ReadKey();

    //剪切文件夹
    Directory.Move(@"c:a",@"C:UsersSJDDesktop ew");
    Console.WriteLine("剪切成功");
    Console.ReadKey()

    //获得指定文件夹下所有的文件的全路径,返回一个string类型的数组
    string[] path = Directory.GetFiles(@"C:UsersSJDDesktoppicture");
    for (int i = 0; i < path.Length; i++)
    {
    Console.WriteLine(path[i]);
    }
    Console.ReadKey();

    //获得指定文件夹下所有图片的全路径,返回一个string类型的数组(*.格式,没有的也不会抛异常)
    string []path = Directory.GetFiles(@"C:UsersSJDDesktoppicture", "*.jpg");
    for (int i = 0; i < path.Length; i++)
    {
    Console.WriteLine(path[i]);
    }
    Console.ReadKey();

    //获得指定文件夹下所有文件夹的路径
    string []path= Directory.GetDirectories(@"C:UsersSJDDesktoppicture");
    for (int i = 0; i < path.Length; i++)
    {
    Console.WriteLine(path[i]);
    }
    Console.ReadKey();

    //判断指定文件夹是否存在,并在目录下创建100个子目录
    if(Directory.Exists(@"C:UsersSJDDesktop ew"))
    {
    for (int i = 0; i < 100; i++)
    {
    Directory.CreateDirectory(@"C:UsersSJDDesktop ew" + i);
    }
    }
    Console.WriteLine("OK");
    Console.ReadKey();

    Directory 操作文件夹
    CreateDirectory 创建文件夹
    Delete 删除文件夹
    Move 剪切文件夹
    Exists 判断文件夹是否存在
    GetFiles 获得指定文件夹目录下所有文件的全路径
    GetDirectory 获得指定文件夹目录下所有文件夹的全路径

    2.浏览器控件 WebBrowser
    Url
    string text = textBox1.Text;
    Uri uri = new Uri("http://"+text);
    webBrowser1.Url = uri;

    3.ComboBox 下拉框控件
    DropDownStyle:控制下拉框的外观样式
    名字:cbo+...

    private void Form1_Load(object sender, EventArgs e)
    {
    //程序加载的时候 将年份添加到下拉框中
    //获得当前的年份
    int year = DateTime.Now.Year;
    for (int i = year; i >= 1949; i--)
    {
    cboYear.Items.Add(i + "年");
    }
    }

    /// <summary>
    /// 当年份发生改变的时候 加载月份
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void cboYear_SelectedIndexChanged(object sender, EventArgs e)
    {
    //添加之前应该清空之前的内容
    cboMoon.Items.Clear();
    for (int i = 1; i <= 12; i++)
    {
    cboMoon.Items.Add(i + "月");
    }
    }

    /// <summary>
    /// 当月份发生改变的时候 加载天
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void cboMoon_SelectedIndexChanged(object sender, EventArgs e)
    {
    cboDay.Items.Clear();
    int day = 0;//定义一个变量来存储天数
    //获得月份
    string strMoon = cboMoon.SelectedItem.ToString().Split(new char[] { '月' }, StringSplitOptions.RemoveEmptyEntries)[0];
    string strYear = cboYear.SelectedItem.ToString().Split(new char[] { '年' }, StringSplitOptions.RemoveEmptyEntries)[0];
    //MessageBox.Show(cboMoon.SelectedItem.ToString());
    int year = Convert.ToInt32(strYear);
    int moon = Convert.ToInt32(strMoon);

    switch(moon)
    {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12: day = 31;
    break;
    case 2:
    if((year%4==0&&year%100!=0)||(year%400==0))
    {
    day = 29;
    }
    else
    {
    day = 28;
    }
    break;
    default:day = 30;
    break;
    }
    for (int i = 1; i <=day; i++)
    {
    cboDay.Items.Add(i+"日");
    }
    }

    4.点击更换图片
    1)、在程序加载的时候,将制定图片文件夹中所有的图片文件名读取到listBox中。

    5.剪刀石头布
    石头 1 剪刀 2 布 3
    玩家赢了: 1-2=-1 2-3=-1 3-1=2
    平手: 相减=0
    另外一种情况:电脑赢了

    比较的时候必须给我返回一个数字

    构思
    1.在form1上创建6个label(文字),3个button(按钮)
    label1(显示 玩家出:) label2(Name改为 lblPlayer(玩家)) label3(显示 电脑出:) label4(Name改为 lblComputer(电脑))
    label5(显示 裁判) label6(Name改为 lblResult(结果))
    label1和label3 作为玩家和电脑的名称 label2和label4 作为显示玩家和电脑出什么的结果
    button1,2,3分别显示为石头,剪刀,布。并且将它们的Name改为btnStone,btnCut,btnBu
    2.先做 点击石头的方法
    把石头赋值给一个string 类型的字符串str
    再把str赋值给玩家。当点击“石头”按钮时,让石头显示在玩家出:的 后面。 lblPlayer.text=str;()
    3.做一个玩家玩游戏的方法
    创建一个类 Player
    在类中创建一个猜拳的方法,放入出拳的string类型,返回Int类型(后面根据数字相减判断) public int ShowFist(string fist)
    首先创建一个int类型的num,初值赋予0, 返回num return num;
    再在中间创建switch-case类型判断出拳的三种形式返回的int值
    switch(fist)
    {
    case "石头":num = 1;
    break;
    case "剪刀":num = 2;
    break;
    case "布":num = 3;
    break;
    }
    4.做一个电脑玩游戏的方法
    创建一个类 Computer
    在类中创建猜拳的方法,和玩家的猜拳方法一样,但是不用放入string类型的值 public int ShowFist()
    首先创建一个random的随机数 random r=new random();
    把r的随机数限定在1-3,赋值给一个Int类型的rNumber int rNumber=r.Next(1,4);

    现在没有一个东西来存储电脑出的石头,剪刀,布
    所以需要单独声明一个字段或属性来存储出的东西,然后赋值给lblComputer
    创建一个自动属性来存储出的拳头
    public string Fist
    {
    get;
    set;
    }
    用switch-case来将随机出来的1,2,3判断,把石头,剪刀,布赋值给this.Fist
    switch(rNumber)
    {
    case 1:this.Fist = "石头";
    break;
    case 2:this.Fist = "剪刀";
    break;
    case 3:this.Fist = "布";
    break;
    }
    最后返回int 类型的rNumber和玩家相减做判断 return rNumber

    5.做一个判断输赢的方法
    创建一个类 CaiPan
    创建一个静态类 省的创建对象new的那一步,返回3种结果,赢,输,平。可以返回string ,int等等,因为要复习枚举,就用枚举来做
    创建一个枚举,把3种结果写进去
    public enum Result
    {
    玩家赢,
    电脑赢,
    平局
    }
    静态类写做 public static Result Judge(int playerNumber,int computerNumber)
    返回一个Result的枚举类型,传入int类型的玩家和电脑数字来相减判断
    用If来进行判断
    public static Result Judge(int playerNumber,int computerNumber)
    {
    if(playerNumber-computerNumber==-1||playerNumber-computerNumber==2)
    {
    return Result.玩家赢;
    }
    else if(playerNumber-computerNumber==0)
    {
    return Result.平局;
    }
    else
    {
    return Result.电脑赢;
    }
    }
    6.返回点击石头的方法
    接着 先创建一个玩家对象,调用玩家玩游戏的方法,传入string 类型的str,返回一个Int类型的玩家数字
    Player player = new Player();
    int playerNumber= player.ShowFist(str);
    再创建一个电脑对象,调用电脑玩游戏的方法,返回一个Int类型的电脑数字
    Computer cpu = new Computer();
    int cupNumber= cpu.ShowFist();
    给显示界面的lblComputer赋值,让他能显示出什么拳。
    lblComputer.Text = cpu.Fist;
    调用caipan类的静态方法,比较输赢,返回一个result类型的res结果
    Result res= CaiPan.Judge(playerNumber, cpuNumber);
    把结果res转为string类型赋值给lblResult,显示在界面的裁判结果上
    lblResult.Text = res.ToString();

    7.把玩游戏封装成一个方法PlayGame,分别给剪刀,石头
    封装
    lblPlayer.Text = str;
    Player player = new Player();
    int playerNumber= player.ShowFist(str);
    Computer cpu = new Computer();
    int cpuNumber= cpu.ShowFist();
    lblComputer.Text = cpu.Fist;
    Result res= CaiPan.Judge(playerNumber, cpuNumber);
    8.完成


    6.打开文件对话框
    //点击弹出对话框
    OpenFileDialog ofd = new OpenFileDialog();
    //设置对话框的标题
    ofd.Title = "请选择要打开的文本文件哟╭(╯3╰)╮";
    //设置对话框可以多选
    ofd.Multiselect = true;
    //设置对话框的初始目录
    ofd.InitialDirectory = @"C:UsersSJDDesktop";
    //设置对话框的文件类型
    ofd.Filter = "文本|*.txt|媒体|*.wav|图片|*.jpg|所有|*.*";
    //展示对话框
    ofd.ShowDialog();

    //获得在打开对话框中选中文件的路径 返回给string类型全路径
    string path = ofd.FileName;
    //判断路径为空则返回
    if(path=="")
    {
    return;
    }
    using (FileStream fsRead = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read))
    {
    byte[] buffer = new byte[1024 * 1024 * 5];
    //实际读取到的字节数
    int r= fsRead.Read(buffer, 0, buffer.Length);
    textBox1.Text= Encoding.Default.GetString(buffer, 0, r);
    }

    7.保存文件对话框
    SaveFileDialog sfd = new SaveFileDialog();
    sfd.Title = "请选择要保存的路径";
    sfd.InitialDirectory = @"C:UsersSJDDesktop";
    sfd.Filter = "文本文件|*.txt|所有文件|*.*";
    sfd.ShowDialog();

    string path = sfd.FileName;
    if(path=="")
    {
    return;
    }
    using (FileStream fsWrite = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write))
    {
    byte[] buffer = Encoding.Default.GetBytes(textBox1.Text);
    fsWrite.Write(buffer, 0, buffer.Length);
    }
    MessageBox.Show("保存成功");

    8.字体和颜色
    FontDialog fd = new FontDialog();
    fd.ShowDialog();
    textBox1.Font= fd.Font;

    ColorDialog cd = new ColorDialog();
    cd.ShowDialog();
    textBox1.ForeColor= cd.Color;

    9.进程
    我们可以把计算机中每一个运行的应用程序都当做是一个进程。
    而一个进程又是由多个线程组成的。

    //获得当前程序中所有正在运行的进程
    Process[]pros= Process.GetProcesses();
    foreach (var item in pros)
    {
    //结束当前程序中所有进程
    //item.Kill()
    Console.WriteLine(item);
    }
    Console.ReadKey();
    //通过进程打开一些应用程序
    Process.Start("calc");
    Process.Start("mspaint");
    Process.Start("notepad");
    Process.Start("iexplore", "http://www.baidu.com");


    //通过一个进程打开指定的文件
    //进程打开实例
    ProcessStartInfo psi = new ProcessStartInfo(@"C:UsersSJDDesktopAE.txt");
    //第一:创建进程对象
    Process p = new Process();
    p.StartInfo = psi;
    p.Start();

    10.单线程给我们带来的问题
    单线程(主线程)去做一件事情,如果还没做完,再去做另一件事情就做不了,会出现假死的情况
    单线程只能去做单一的事情,一复杂就没办法了
    //创建一个线程去执行这个方法
    Thread th=new Thread(Test);
    //标记这个线程准备就绪了,随时可以被执行。具体什么时候执行这个线程,由Cpu决定
    th.Start();

    ***前台线程:只有所有的前台线程都关闭才能完成程序关闭。
    ***后台线程:只要所有的前台线程结束,后台线程自动结束。

    默认情况下,新创建的线程都叫前台线程
    所以那个程序要设置为后台线程
    //将线程设置为后台线程
    th.IsBackground=true;
    th.Start();

    在.Net下,是不允许跨线程的访问。
    可以让应用程序不去检查有没有跨线程访问
    //取消跨线程的访问
    control是win所有空间的基类
    control.checkforillegalcrossthreadcalls=false;

    //当你点击关闭窗体的时候,判断新线程是否为null
    If(th !=null)
    {
    //结束这个线程 线程被abort就不能再被start了
    th.abort();
    }
    无法通过代码去操作CPU

    运行时----调试---窗口---输出

  • 相关阅读:
    flask+Gunicorn+nginx部署
    配置Django实现数据库读写分离
    mysql分库分表
    python的反射
    flask-restful的使用
    spring源码(4)
    spring源码(3)
    spring源码(2)
    spring源码(1)
    tomcat8.5 配置数据源
  • 原文地址:https://www.cnblogs.com/VSMinos/p/7873454.html
Copyright © 2020-2023  润新知