关于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