1.Directory//File 文件 Path 路徑 FileStream StreamReader StreamWriter 流 Directory 文件夾 目錄 //創建文件夾 Directory.CreateDirectory(@"C:\a\b"); Console.WriteLine(" ...
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 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:\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
運行時----調試---視窗---輸出