span.kw { color: #007020; font-weight: bold; }
code > span.dt { color: #902000; }
code > span.dv { color: #40a070; }
code > span.bn { color: #40a070; }
code > span.fl { color: #40a070; }
code > span.ch { color: #4070a0; }
code > span.st { color: #4070a0; }
code > span.co { color: #60a0b0; font-style: italic; }
code > span.ot { color: #007020; }
code > span.al { color: #ff0000; font-weight: bold; }
code > span.fu { color: #06287e; }
code > span.er { color: #ff0000; font-weight: bold; }
-->

更多相关文章,见本人的个人主页:zhongxiewei.com

关于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下的“记事本”功能进行了复制。具体代码见: Notepad

“记事本”的界面实现

对于内部的对话框,直接采用了“工具箱”中自带的对话框,如FontDialog, OpenFileDialog, SaveFileDialog, PrintDialog, PageSetupDialog。

“记事本”相关功能

关于文件的打开,存储,以及退出

新建

如果当前打开的文件没有保存
提示是否保存该文件
选择保存:
跳出的另存为对话框到文件默认的路径,默认的文件名
选择保存:进行保存操作
选择取消:不进行任何操作,直接返回
选择不保存:直接新建;
取消:不进行任何操作
否则
直接新建

打开:

如果当前打开的文件没有保存
提示是否保存文件
选择保存:
跳出的另存为对话框到文件默认的路径,默认的文件名
选择保存:进行保存操作
选择取消:不进行任何操作,直接返回
选择不保存:直接打开;
取消:不进行任何操作
否则
直接打开

保存

如果当前的文件不是打开得到的
弹出另存为对话框,输入文件名进行保存
否则
直接保存到对应的文件

另存为

弹出另存为对话框,输入文件名进行保存

退出:

如果当前打开的文件没有保存
提示是否保存文件
选择保存:
跳出的另存为对话框到文件默认的路径,默认的文件名
选择保存:进行保存操作
选择取消:不进行任何操作,直接返回
选择不保存:直接退出;
取消:不进行任何操作
否则
直接退出

从上述的文字描述中,可以得到复用的语句有:

如果当前打开的文件没有保存
提示是否保存文件
选择保存:
跳出的另存为对话框到文件默认的路径,默认的文件名
选择保存:进行保存操作
选择取消:不进行任何操作,直接返回
选择不保存:直接退出;
取消:不进行任何操作

检查当前的文件是否没有保存,如果否,进行选择是否保存文件。可以利用TextBox的TextChanged事件。当该事件发生时,设定textChanged变量为true。当文件保存或是文件打开的时间成功完成之后,该值被赋值为false。另外还需要实现的是“提示是否保存的对话框”。

进一步将上述复用的语句整理为函数,如下:

// 如果文件没保存,同时点击了忽略选项,那么返回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

Windows Programming ---- Beginning Visual C#的更多相关文章

  1. please wait while windows configures microsoft visual studio professional 2013 [转载]

    2016年5月30日 VS3013安装update 2以后,打开offie出现"please wait while windows configures microsoft visual s ...

  2. Windows下使用Visual Studio 2010编译ffmpeg全过程

    在visual studio 2010中调用ffmpeg http://blog.sina.com.cn/s/blog_4178f4bf01018wqh.html Windows下使用Visual S ...

  3. Fix Python 3 on Windows error Microsoft Visual C++ 14.0 is required

    Fix Python 3 on Windows error Microsoft Visual C++ 14.0 is required Fix the error for Python 3.6 and ...

  4. [持续更新]Windows Programming常见Hungarian Notation/Abbreviation大全

    Windows Programming必须了解的naming-convention,下面解释每个前缀/缩略词的含义,如果含义的解释一行放不下的,就把解释放在一个引用框里 PrefixMeaningCS ...

  5. Windows系统 为 Visual Studio软件 搭建 OpenCV2 开发环境

    Windows系统 为 Visual Studio软件 搭建 OpenCV2 开发环境 我们的电脑系统:Windows 10 64位 Visual Studio 软件:Visual Studio 20 ...

  6. windows programming can't find windows.h

    在用控制台编译c++程序的时候,可能会遇到找不到windows.h的情况.这是因为我们在使用cl命令的时候,并没有配置好环境变量. 所以我们在运行cl命令之前,我们可以运行C:\Program Fil ...

  7. Windows 10和Visual Studio 2015 能给.Net方向的开发从业者带来什么?

    .Net 多年前我们选择了你,现在在当前的移动互联网热火朝天的时代,你能给我们什么样的惊喜?面对IOS和android的势头,windows的移动端能否实现三国鼎立? windows 10 号称统一各 ...

  8. Windows下使用Visual Studio Code搭建Go语言环境

    1.安装GO语言   下载地址:    https://golang.org/dl/   Windows下直接运行安装GO语言即可.     安装成功.   安装完毕GO语言后,需要添加GOPATH环 ...

  9. Cocos2d-x学习之windows 7的visual studo 2010开发环境安装

    1.引擎代码的下载 官方版本地址为: http://www.cocos2d-x.org/projects/cocos2d-x/wiki/Download 目前最新版本是cocos2d-2.0-rc0a ...

随机推荐

  1. redux学习

    redux学习: 1.应用只有一个store,用于保存整个应用的所有的状态数据信息,即state,一个state对应一个页面的所需信息 注意:他只负责保存state,接收action, 从store. ...

  2. TypeScript Vs2013 下提示Can not compile modules unless '--module' flag is provided

    VS在开发TypeScript程序时候,如果import了模块有的时候会有如下提示: 这种情况下,只需要对当前TypeScript项目生成设置为AMD规范即可!

  3. MySQL设置字段的默认值为当前系统时间

    问题产生: 当我们在对某个字段进行设置时间默认值,该默认值必须是的当前记录的插入时间,那么就将当前系统时间作为该记录创建的时间. 应用场景: 1.在数据表中,要记录每条数据是什么时候创建的,应该由数据 ...

  4. C#文件安全管理解析

    在实际的项目开发中,我们经常需要使用到文件的I/O操作,主要包含对文件的增改删查等操作,这些基本的操作我们都是很熟悉,但是较少的人去考虑文件的安全和操作的管理等方面,例如文件的访问权限管理,文件数据的 ...

  5. JDBC MySQL 多表关联查询查询

    public static void main(String[] args) throws Exception{ Class.forName("com.mysql.jdbc.Driver&q ...

  6. 【读书】PHP程序员要读的书目(不断完善中)

    本文地址 分享提纲: 1. PHP 2. Linux 3. Apache/Nginx 4. Mysql 5.设计模式/架构 6. 缓存并发 7. 其他语言 8. 代码基础 9. 大前端 10. 管理生 ...

  7. Flexible 弹性盒子模型之CSS flex-basis 属性

    实例 设置第二个弹性盒元素的初始长度为 80 像素: div:nth-of-type(2){flex-basis:80px;}   效果预览 浏览器支持 表格中的数字表示支持该属性的第一个浏览器的版本 ...

  8. atitit.attilax的软件 架构 理念.docx

    atitit.attilax的软件 架构 理念.docx 1. 预先规划.1 2. 全体系化1 3. 跨平台2 4. 跨语言2 5. Dsl化2 5.1. 界面ui h5化2 6. 跨架构化2 7. ...

  9. ELK分析IIS日志

      LogStash.conf input { file { type => "iis_log" path => ["C:/inetpub/logs/LogF ...

  10. mono3.2.3+Jexus5.5+openSuSE13.1的asp.net

    读书的时候,我似乎有系统地学习过asp.net,但是基本已经还掉了...工作之后有做过一个内部用的网站,但也没有正式使用,的确只能算是个课程设计型的东西,不能做产品.后来工作需求是做Win8下的APP ...