好一段時間了,今天寫了個簡單的記事本,記錄一下我的成長,是不是長的太慢了呢?!
目前這個記事本可以實現一些比較常用的功能,比如複製,粘貼,保存,切換字體之類的工作都能幹了。後面再繼續強大。。。
記事本是由一個菜單欄和文本框組成的,簡單實用。其實做這些界面都還好,只要熟悉了窗體以及各種控件的基本屬性就差不多了。
下面是一個簡單的記事本窗體:
在這裏面我們爲上下文菜單中的菜單項設置功能。
這裏面我犯了一個錯誤。
問題:
在寫複製粘貼功能的時候想的過於複雜。我以爲複製需要將所選定內容通過讀取流(StreamReader)先讀到流裏面,然後再在粘貼的時候再次通過寫入流(StreamWriter)將之前讀到的內容再寫如指定的位置。但是WinForm已經給我們預先準備好了Copy方法和Paste方法,我們可以直接通過文本框調用方法就可以了。
思考:
在接觸新知識的時候我們除了用學過的知識來解決它,更應該做的是尋找新的方法。如果單憑老師將的,而不去自己摸索,那收穫遠遠下減少了。猜猜濛濛碰碰,更能爲我們帶來意想不到的收穫。
看看代碼:
//複製 private void mnuCopy_Click(object sender, EventArgs e) { this.txtContent.Copy(); } //粘貼 private void mnuPast_Click(object sender, EventArgs e) { this.txtContent.Paste(); } //剪貼 private void mnuCut_Click(object sender, EventArgs e) { this.txtContent.Cut(); } //全選 private void mnuSelectAll_Click(object sender, EventArgs e) { this.txtContent.SelectAll(); } //新建 private void NewToolStripMenuItem_Click(object sender, EventArgs e) { this.txtContent.Text = "";//新建其實就是將文本框清空 } //打開一個新的文件 private void OpenToolStripMenuItem_Click(object sender, EventArgs e) { //提示用戶打開文件 OpenFileDialog ofd = new OpenFileDialog(); DialogResult dr = ofd.ShowDialog(); if (dr==DialogResult.Cancel) { return; } string path = ofd.FileName; StreamReader sr = new StreamReader(path,Encoding.GetEncoding("GB2312")); string s=sr.ReadToEnd(); this.txtContent.Text = s; sr.Close(); } private void SaveToolStripMenuItem_Click(object sender, EventArgs e) { //判斷當前有沒有存儲路徑 if (savePath == null) { //如果沒有,就意味着着一定是第一次保存。就打開對話框提示用戶選擇路徑 SaveFileDialog sfd = new SaveFileDialog(); DialogResult dr = sfd.ShowDialog(); //判斷用戶的選擇以確定是否要繼續 if (dr == DialogResult.Cancel) { return; } //選擇要保存的路徑 string path = sfd.FileName; savePath = path; }//創建一個流(一根管道),用來存儲寫入的文件 StreamWriter sw = new StreamWriter(savePath, false, Encoding.GetEncoding("GB2312")); //將文本中的內容寫入流 sw.Write(this.txtContent.Text); sw.Flush(); sw.Close(); } //另存爲 string savePath = null; private void OtherSaveToolStripMenuItem_Click(object sender, EventArgs e) { //另存爲按鈕每次被按下都應該彈出一個路徑選擇對話框 //提示用戶選擇保存路徑 SaveFileDialog sfd = new SaveFileDialog(); DialogResult dr = sfd.ShowDialog(); if (dr == DialogResult.Cancel) { return; } //選擇要保存的路徑 string path = sfd.FileName; savePath = path; //將流中的內容寫進選擇好的路徑 StreamWriter sw = new StreamWriter(savePath, false, Encoding.GetEncoding("GB2312")); //將文本中的內容寫入流 sw.Write(this.txtContent.Text); sw.Flush(); sw.Close(); } //退出 private void exitToolStripMenuItem_Click(object sender, EventArgs e) { this.Close(); } //刪除 private void deleteToolStripMenuItem_Click(object sender, EventArgs e) { this.txtContent.Cut();//將選定內容移動到剪貼板 Clipboard.Clear();//從剪貼板中移除所有數據 } //撤銷 private void toolStripMenuItem5_Click(object sender, EventArgs e) { this.txtContent.Undo();//撤銷文本框的上一個編輯操作 } //設置字體 private void fontToolStripMenuItem_Click(object sender, EventArgs e) { //提示用戶選擇一種字體 FontDialog fd = new FontDialog(); //將當前字體傳進選擇框,這樣即使用戶沒有選擇也不會改變原來的字體樣式 fd.Font = this.txtContent.Font; DialogResult dr = fd.ShowDialog(); //判斷用戶的選擇 if (dr==DialogResult.Cancel) { return; } //將用戶選擇字體用於當前文檔 this.txtContent.Font = fd.Font; } //自動換行 private void autoWorlWrapToolStripMenuItem_Click(object sender, EventArgs e) { //設置自動換行工具菜單項的checked屬性的值與當前相反 this.autoWorlWrapToolStripMenuItem.Checked = !this.autoWorlWrapToolStripMenuItem.Checked; //將設置好的值應用到當前文檔 this.txtContent.WordWrap = this.autoWorlWrapToolStripMenuItem.Checked; } //獲取當前日期 private void 時間日期ToolStripMenuItem_Click(object sender, EventArgs e) { this.txtContent.Text+= DateTime.Now.ToString();//在文檔最後加入當前日期 } }