1.Directory
//File 文件 Path 路径 FileStream StreamReader StreamWriter 流 Directory 文件夹 目录//创建文件夹
Directory.CreateDirectory(@"C:\a\b"); Console.WriteLine("创建成功"); Console.ReadKey();//删除文件夹,文件夹若不是空的,会抛异常,需要再后面加,true强行删除
Directory.Delete(@"c:\a",true); Console.WriteLine("删除成功"); Console.ReadKey();//剪切文件夹 Directory.Move(@"c:\a",@"C:\Users\SJD\Desktop\new"); Console.WriteLine("剪切成功"); Console.ReadKey()//获得指定文件夹下所有的文件的全路径,返回一个string类型的数组
string[] path = Directory.GetFiles(@"C:\Users\SJD\Desktop\picture"); for (int i = 0; i < path.Length; i++) { Console.WriteLine(path[i]); } Console.ReadKey();//获得指定文件夹下所有图片的全路径,返回一个string类型的数组(*.格式,没有的也不会抛异常)
string []path = Directory.GetFiles(@"C:\Users\SJD\Desktop\picture", "*.jpg"); for (int i = 0; i < path.Length; i++) { Console.WriteLine(path[i]); } Console.ReadKey();//获得指定文件夹下所有文件夹的路径
string []path= Directory.GetDirectories(@"C:\Users\SJD\Desktop\picture"); for (int i = 0; i < path.Length; i++) { Console.WriteLine(path[i]); } Console.ReadKey();//判断指定文件夹是否存在,并在目录下创建100个子目录
if(Directory.Exists(@"C:\Users\SJD\Desktop\new")) { for (int i = 0; i < 100; i++) { Directory.CreateDirectory(@"C:\Users\SJD\Desktop\new\" + 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 rNumber5.做一个判断输赢的方法
创建一个类 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:\Users\SJD\Desktop"; //设置对话框的文件类型 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:\Users\SJD\Desktop"; 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:\Users\SJD\Desktop\AE.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 运行时----调试---窗口---输出