1. 程式人生 > >C#基礎筆記(七)

C#基礎筆記(七)

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 + “年”);
}
}

///
/// 當年份發生改變的時候 載入月份
///
///
///
private void cboYear_SelectedIndexChanged(object sender, EventArgs e)
{
//新增之前應該清空之前的內容
cboMoon.Items.Clear();
for (int i = 1; i <= 12; i++)
{
cboMoon.Items.Add(i + “月”);
}
}

///
/// 當月份發生改變的時候 載入天
///
///
///
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%40&&year%100!=0)||(year%4000))
{
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-computerNumber2)
{
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
執行時----除錯—視窗—輸出