C#基礎筆記(第十五天)

来源:http://www.cnblogs.com/VSMinos/archive/2017/11/21/7873454.html
-Advertisement-
Play Games

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

運行時----調試---視窗---輸出


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 引自https://www.cnblogs.com/lsgsanxiao/p/5523282.html invoke和begininvoke 區別 一直對invoke和begininvoke的使用和概念比較混亂,這兩天看了些資料,對這兩個的用法和原理有了些新的認識和理解。 首先說下,invoke和b ...
  • 如何:對 Windows 窗體控制項進行線程安全調用 訪問 Windows 窗體控制項本質上不是線程安全的。 如果有兩個或多個線程操作某一控制項的狀態,則可能會迫使該控制項進入一種不一致的狀態。 還可能會出現其他與線程相關的 Bug,例如爭用情況和死鎖。 確保以線程安全方式訪問控制項非常重要。 在未使用 In ...
  • 一 前言 對於正則表達式,相信很多人都知道,但是很多人的第一感覺就是難學,因為看第一眼時,覺得完全沒有規律可尋,而且全是一堆各種各樣的特殊符號,完全不知所云。 其實只是對正則不瞭解而以,瞭解了你就會發現,原來就這樣啊正則所用的相關字元其實不多,也不難記,更不難懂,唯一難的就是組合起來之後,可讀性比較 ...
  • 一. 概念理解 你可能有留意到當你瀏覽網頁時,會有一些推送消息,大多數是你最近留意過的同類東西,比如你想買桌子,上淘寶搜了一下,結果連著幾天會有各種各樣的桌子的鏈接。這是因為 你瀏覽某個網頁的時候,WEB 伺服器會先送一些資料放在你的電腦上,類似於你打的文字,選的一些東西什麼的,Cookie 會幫 ...
  • 效果圖: 下載鏈接:創建wpf項目引用 如下:鏈接:http://pan.baidu.com/s/1chj1nS 密碼:u7y2 第一步:創建項目引用CefSharp 第二步:第二步將DLL拷貝到運行項目的Debug下 第三步:項目平臺設置32位 第四步:創建視頻文件與html腳本 第五步:Xaml ...
  • 本文為原創文章、源代碼為原創代碼,如轉載/複製,請在網頁/代碼處明顯位置標明原文名稱、作者及網址,謝謝! 本文使用的工具下載地址為: 或 dnSpy官方下載地址: 軟體界面如下: 該軟體分別64位版本及32位版本,分別為dnSpy.exe 及 dnSpy-x86.exe,調試時請註意調試所對應軟體版 ...
  • using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Security.Cryptography; using System.Text; namespace C... ...
  • 1.進程複習//通過進程去打開應用程式 Process.Start("calc"); Process.Start("mspaint"); Process.Start("notepad"); Process.Start("iexplore", "http://www.baidu.com"); //通過 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...