C#基礎(3)
摘要: 基於.Net Framework的winform開發,主要是關於為winform平臺的一些控件的屬性以及事件的使用。
涉及內容: 1、Directory類 2、文本對話框 3、選擇字體和顏色對話框 4、Treeview的使用 5、進程以及多線程(線程池) 6、GDI繪圖 7、自定義控件
1、Directory類
directory類是一個靜態類,作用:操作文件夾。操作文件夾在項目中比較常用,比如涉及到文件的存儲,需要判斷文件夾是否存在,然後根據時間日期等創建文件夾
Directory.CreateDirectory(@"c:\a\b"); //創建文件夾 Directory.Delete(@"c:\Windows.old",true); //刪除文件夾 Directory.Move(@"c:\a",@"C:\Users\xsh.cpp\Desktop\new"); //剪切文件夾 必須新建文件夾的名字 string[] path = Directory.GetFiles(@"C:\Users\xsh.cpp\Desktop\圖像合成", "*.jpg"); //獲得一個文件夾下的全部路徑 按類挑選文件+ *.文件後綴 選類型文件 string[] paths = Directory.GetDirectories(@"C:\Users\xsh.cpp\Desktop\圖像合成");//獲取文件夾下的全部路徑 Directory.Exists(@"c:\a\b") //判斷文件夾是否存在
2、文本對話框
當需要上傳或者打開本地某一個文件的時候,就會打開一個文本對話框,去選擇文件。
a、打開文本對話框
using System.IO; OpenFileDialog open = new OpenFileDialog(); //創建對象 open.Title = "選擇需要的文件"; //對話框標題 open.Multiselect = true; //對話框多選,也就是同時選擇多個文件 open.InitialDirectory = @"C:\Users\xsh.cpp\Desktop"; //對話框的初始文件夾 open.Filter = "文本文件|*.txt|媒體文件|*.wav|圖片文件|*.jpg|所有文件|*.*"; //可以選擇的文件類型 open.ShowDialog(); //必要的 一定要有
b、保存文本對話框:選擇保存路徑
SaveFileDialog save = new SaveFileDialog(); //創建對象 save.Title = "請選擇保存的路徑:"; //對話框標題 save.InitialDirectory = @"C:\Users\xsh.cpp\Desktop"; //對話框默認位置 save.Filter = "文本文件|*.txt|所有文件|*.*"; //對話框文件類型 save.ShowDialog(); //打開對話框 後續寫入的一些代碼
3、選擇字體和顏色對話框
有時候有改變選中字體或者字體顏色的需求,就需要運用可以改變字體或者顏色的對話框,然後去選擇
FontDialog font = new FontDialog(); //創建對象 font.ShowDialog(); //打開對話框 richTextBox1.SelectionFont=font.Font; //為選中的文本更換字體 ColorDialog color = new ColorDialog(); //創建對象 color.ShowDialog(); richTextBox1.SelectionColor = color.Color; //為選中的文本更換字體顏色
4、viewtree的使用
TreeNodeCollection tc=treeView1.Nodes; tc.Add(根節點); //添加根節點 TreeNode tn=treeView1.SelectedNode; tn.Nodes.Add(子節點名稱); //為選中的根節點添加子節點
TreeView、遞歸、文件處理(資料管理器)
聲明TreeNodeCollection tc ①、獲取路徑下的所有文件夾名稱:string [] path=Directory.GetDirectories(文件路徑); ②循環數組,截取文件夾名稱(單獨名稱) string dirName=Path.GetFileNameWithoutExtension(path[i]); ③加入TreeView, tc.Add(dirName); ④ 遞歸:以當前節點繼續循環 -->代碼: public static void LoadFile(string str, TreeNodeCollection tc) { //文件夾 string []temp= Directory.GetDirectories(str); for (int i = 0; i < temp.Length; i++) { //截取文件夾路徑的名稱 string dirName= Path.GetFileNameWithoutExtension(temp[i]); TreeNode tn= tc.Add(dirName); //以當前節點 LoadFile(temp[i],tn.Nodes); } //文件 string [] fileName= Directory.GetFiles(str); for (int i = 0; i < fileName.Length; i++) { string dirName = Path.GetFileNameWithoutExtension(fileName[i]); tc.Add(dirName); }
5、進程以及線程
a、進程:打開任務管理器就可以看到當前正在運行的一些進程,當然,進程可以在C#代碼中打開或者關閉
using System.Diagnostics; Process.Start("notepad"); //通過進程打開記事本 Process.Start(@"C:\Users\xsh.cpp\Desktop\1.wav"); //通過線程打開指定文件 //獲取當前程序運行的所有進程 Process ps = new Process(); Process[] pce = Process.GetProcesses(); pce[i].iKill(); //關閉進程
b、多線程
線程:一個項目中比較常用的東西,一個遊戲,軟件的運行,往往是多線程的。一個網站後臺運行某些計算,可以開辟一個線程。winform默認為單線程。 例如,當執行計算的時候,不能夠拖動窗體,如果另外開啟一個線程,就解決了這個問題。 常例:邊看書邊聽歌
簡單運用:
using System.Threading; Thread td = new Thread(Test); //開辟一個線程 Test為一個方法 td.IsBackground = true; // //標記為後臺進程:線程默認都是為前臺線程,一個進程退出標誌:所有前臺線程都結束後 td.Start(); //讓線程可以隨時準備開始 在start()中傳入方法的參數
Thread.Sleep(3000); //線程休眠3秒
線程池:
程池的線程本身都是後臺線程線程池的優勢:線程可以進行重用
啟動一個線程:開辟內存空間。線程非常多的時候,操作系統花費大量時間用在線程切換
ThreadPool.QueueUserWorkItem(new WaitCallback(Target),a); //Target為要執行的方法, a為方法的參數 ThreadPool.QueueUserWorkItem(o => {}); //中間問lambda表達式, 常用法
比較詳細的描述,做個標記↓↓
https://www.cnblogs.com/wwj1992/p/5976096.html
6、GDI繪圖
GDI是Graphics Device Interface的縮寫,含義是圖形設備接口,它的主要任務是負責系統與繪圖程序之間的信息交換,處理所有Windows程序的圖形輸出。
常用:繪制驗證碼
using System.Drawing; //繪圖 : 筆 紙 繪圖的對象 //創建GDI對象 Graphics g = this.CreateGraphics(); //創建畫筆對象 Pen pen = new Pen(Brushes.Red); //創建兩個點 兩點確定一條直線 Point p1 = new Point(100,100); Point p2 = new Point(300, 350); //調用GDI對象進行畫圖 g.DrawLine(pen, p1, p2);
繪制驗證碼:
//產生隨機數 Random r = new Random(); string str = null; for (int i = 0; i <6; i++) { str += r.Next(0,10).ToString(); }//創建GDI對象 Bitmap bit = new Bitmap(pictureBox1.Width, 300); //定義高度和寬度 Graphics g = Graphics.FromImage(bit); //驗證碼數字 for (int i = 0; i < 6; i++) { string[] font = { "宋體", "華文行楷", "黑體", "方正舒體", "方正姚體" }; Color[] color = { Color.Red, Color.Yellow, Color.Black, Color.Blue, Color.Green, Color.Pink }; // Brushes [] bus = {} Point p1 = new Point(i*40, 100); g.DrawString(str[i].ToString(), new Font(font[r.Next(0, 5)],100), new SolidBrush(color[r.Next(0,6)]), p1); } //繪制線 Pen pen = new Pen(Color.Green); for (int i = 0; i <30; i++) { Point p1 = new Point(r.Next(0, pictureBox1.Width), r.Next(100, 250)); Point p2 = new Point(r.Next(0, pictureBox1.Width), r.Next(100, 250)); g.DrawLine(pen,p1,p2); } //繪制點 for (int i = 0; i < 800; i++) { bit.SetPixel(r.Next(0, pictureBox1.Width), r.Next(100, 250), Color.Green); }
繪制驗證碼可以封裝成一個類,然後需要的時候,傳入相應的參數,則可以生成。
7、自定義控件
Button btn = new Button(); //創建一個按鈕的對象 btn.Size btn.Location btn.BackColor //設置一些屬性 this.Controls.Add(btn); //添加到窗體中(必須) btn.Click+=Btn_Click1 // +=後按兩次Teb 鍵
小結:winform一些有關的控件的使用還有很多,也很多比較重要的。不過之前打的代碼也都看過了一遍。雖然記不住,但這東西應該不是靠記憶的。很多都是根據邏輯去使用,一個控件觸發的事件,可以在事件的詳細說明去了解,還有很多屬性,都基本類似。
C#基礎(3)