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. 首个threejs项目-前端填坑指南

    第一次使用threejs到实际项目中,开始的时候心情有点小激动,毕竟是第一次嘛,然而做着做着就感受到这玩意水好深,满满的都是坑,填都填不过来.经过老板20天惨无人道的摧残,终于小有成就. 因为第一次搞 ...

  2. C++中的变长参数

    新参与的项目中,为了使用共享内存和自定义内存池,我们自己定义了MemNew函数,且在函数内部对于非pod类型自动执行构造函数.在需要的地方调用自定义的MemNew函数.这样就带来一个问题,使用stl的 ...

  3. Python学习--04条件控制与循环结构

    Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...

  4. PHP数据类型之间的强制转换

    1.实型数据强制转换为整型数据 $float1=2.7; $int1=(int)$float1; echo var_dump($int1),"<br>"; 输出: in ...

  5. .NET平台开源项目速览(16)C#写PDF文件类库PDF File Writer介绍

    1年前,我在文章:这些.NET开源项目你知道吗?.NET平台开源文档与报表处理组件集合(三)中(第9个项目),给大家推荐了一个开源免费的PDF读写组件 PDFSharp,PDFSharp我2年前就看过 ...

  6. Android业务组件化之子模块SubModule的拆分以及它们之间的路由Router实现

    前言: 前面分析了APP的现状以及业务组件化的一些探讨(Android业务组件化之现状分析与探讨),以及通信的桥梁Scheme的使用(Android业务组件化之URL Scheme使用),今天重点来聊 ...

  7. ASP.NET Core 中文文档目录

    翻译计划 五月中旬 .NET Core RC2 如期发布,我们遂决定翻译 ASP.NET Core 文档.我们在 何镇汐先生. 悲梦先生. 张仁建先生和 雷欧纳德先生的群中发布了翻译计划招募信息,并召 ...

  8. java面向对象六原则一法则

    1. 单一职责原则:一类只做它该做的事. 2. 里氏替换原则:子类必须能够替换基类(父类),否则不应当设计为其子类. 3. 依赖倒换原则:设计要依赖于抽象而不是具体化. 4. 接口隔离原则:接口要小而 ...

  9. 海康网络摄像机YV12转换为BGR,由opencv Mat显示 (转)

    我使用的是海康DS-2CD852MF-E, 200万,网络摄像机,已经比较老了,不过SDK在海康官网下载的,开发流程都差不多. 海康摄像机回调解码后的视频数据格式为YV12,顺便说一下YV12的数据格 ...

  10. Linux上课笔记--随手记Linux命令

    初次接触Linux就是感觉这系统不够友好不够人性化,因为首先接触电脑就是win,图形化界面什么操作都可以清晰看到.随着更多的接触越来越发现Linux的强大,虽然我只是一个小白,可我就是爱上他了.现在就 ...