關於windows programming最爲基礎的就是須要掌握各類控件的使用方法,如Button Control, Label and LinkLabel Control, TextBox Control, RadioButton and CheckBox Control, ListBox and CheckedListBox Control, ListViewControl, TabControl Control等等。具體的使用方式能夠詳見《Beginning Visual C#》一書中。在這裏,對windows下的「記事本」功能進行了複製。具體代碼見: Notepadwindows
對於內部的對話框,直接採用了「工具箱」中自帶的對話框,如FontDialog, OpenFileDialog, SaveFileDialog, PrintDialog, PageSetupDialog。函數
新建:工具
若是當前打開的文件沒有保存 提示是否保存該文件 選擇保存: 跳出的另存爲對話框到文件默認的路徑,默認的文件名 選擇保存:進行保存操做 選擇取消:不進行任何操做,直接返回 選擇不保存:直接新建; 取消:不進行任何操做 不然 直接新建
打開:字體
若是當前打開的文件沒有保存 提示是否保存文件 選擇保存: 跳出的另存爲對話框到文件默認的路徑,默認的文件名 選擇保存:進行保存操做 選擇取消:不進行任何操做,直接返回 選擇不保存:直接打開; 取消:不進行任何操做 不然 直接打開
保存:spa
若是當前的文件不是打開獲得的 彈出另存爲對話框,輸入文件名進行保存 不然 直接保存到對應的文件
另存爲:code
彈出另存爲對話框,輸入文件名進行保存
退出:orm
若是當前打開的文件沒有保存 提示是否保存文件 選擇保存: 跳出的另存爲對話框到文件默認的路徑,默認的文件名 選擇保存:進行保存操做 選擇取消:不進行任何操做,直接返回 選擇不保存:直接退出; 取消:不進行任何操做 不然 直接退出
從上述的文字描述中,能夠獲得複用的語句有:blog
若是當前打開的文件沒有保存 提示是否保存文件 選擇保存: 跳出的另存爲對話框到文件默認的路徑,默認的文件名 選擇保存:進行保存操做 選擇取消:不進行任何操做,直接返回 選擇不保存:直接退出; 取消:不進行任何操做
檢查當前的文件是否沒有保存,若是否,進行選擇是否保存文件。能夠利用TextBox的TextChanged事件。當該事件發生時,設定textChanged變量爲true。當文件保存或是文件打開的時間成功完成以後,該值被賦值爲false。另外還須要實現的是「提示是否保存的對話框」。事件
進一步將上述複用的語句整理爲函數,以下:ip
// 若是文件沒保存,同時點擊了忽略選項,那麼返回false,不然範圍true private bool isChangedTextProcessed() { if (textChanged) { alertForm.SetMessage(fullname); DialogResult dlgResult = alertForm.ShowDialog(); if (dlgResult == DialogResult.OK) { dlgResult = saveFileAs(); if (dlgResult == DialogResult.Cancel) return false; } else if (dlgResult == DialogResult.Cancel) return false; } return true; }
最爲關鍵的打印工做有printDocument掌控,以前,有pageSetupDialog用於頁面的設置,以及printDialog用於打印機的選擇等。
在打印的過程當中,須要注意的事情:當一行的字符串的長度比打印頁面區間的長度要大的時候,如何處理?沒有實現
每次當「編輯」的下拉菜單出現的時候,都會對「剪切」,「複製」,「刪除」的可訪問狀態進行設置。當有文本被選擇時,設置爲true;不然設置爲false。借用的事前爲:DropDownOpened事件。以下:
private void mitEdit_DropDownOpened(object sender, EventArgs e) { if (Clipboard.ContainsText()) mitPaste.Enabled = true; else mitPaste.Enabled = false; if (txbMain.SelectedText.Equals("")) { mitCopy.Enabled = false; mitCut.Enabled = false; mitDelete.Enabled = false; } else { mitCopy.Enabled = true; mitCut.Enabled = true; mitDelete.Enabled = true; } }
撤銷功能直接使用了「textbox」的「Undo」方法。複製使用了Clipboard.Clear(); Clipboard.SetText(selectedText);
,剪切採用的方式爲:Clipboard.Clear();txbMain.Cut();
,刪除採用的方式爲:int start=txbMain.SelectionStart; txbMain.Text = txbMain.Text.Substring(0,start) + txbMain.Text.Substring(start + txbMain.SelectionLength);
,粘帖採用的方式以下:
private void mitPaste_Click(object sender, EventArgs e) { int start = txbMain.SelectionStart; deleteText(); string insertString = Clipboard.GetText(); txbMain.Text = txbMain.Text.Insert(start, insertString); txbMain.SelectionStart = start + insertString.Length; }
當含有文字內容的時候,菜單中查找以及查找下一個的選項都爲可點擊的。當新建文件的時候,將它們的enable屬性設置爲false,當打開文件,或新建的文件已經進行了編輯,它們的enable屬性設置爲true。具體文本的查找,對於大小寫敏感的搜索方式,採用了string.IndexOf和string.LastIndexOf,對於大小寫不敏感的搜索方式,借用了System.Globalization.CompareInfo。
當點擊查找對話框右上角的叉的時候,默認狀況下爲銷燬該窗體,可是,這並非咱們想要的結果,咱們但願隱藏該窗體,而不是完全的銷燬該窗體,因而創建事件FormClosing(object sender, FormClosingEventArgs e)
,並在該事件中將e.Cancel
設定爲true。
對於替換功能中,所有替換的點擊選項。採用了比較簡單的方法:依次使用查找下一個,和替換當前匹配的方式,最後直到徹底替換。其中對於大小寫匹配的問題在findNext 中進行實現,findNext以及替換功能的代碼以下:
private void findNext() { int point = -1; point = parentText.SelectionStart + parentText.SelectionLength; // parentText表示主form窗口中的textbox if (ckbBigLo.Checked) { point = point > parentText.Text.Length ? -1 : parentText.Text.IndexOf(txbFindContent.Text, point); } else { point = point > parentText.Text.Length ? -1 : cmpInfo.IndexOf(parentText.Text, txbFindContent.Text, point, CompareOptions.IgnoreCase); } if (point == -1) { MessageBox.Show("找不到" + txbFindContent.Text, "記事本", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { parentText.Select(point, txbFindContent.Text.Length); parentText.ScrollToCaret(); parentForm.Active(); } } private void replace() { string selectedText = parentText.SelectedText.ToLower(); int start = parentText.SelectionStart; if (selectedText.Equals(txbFindContent.Text.ToLower())) { parentText.Text = parentText.Text.Substring(0, start) + txbReplaceContent.Text + parentText.Text.Substring(start + selectedText.Length); partentText.SelectionStart = start + txbReplaceContent.Text.Length; } }
字體的設置採用了現有的fontdialog