基于Windows CE的C#简单文本编辑器.doc_第1页
基于Windows CE的C#简单文本编辑器.doc_第2页
基于Windows CE的C#简单文本编辑器.doc_第3页
基于Windows CE的C#简单文本编辑器.doc_第4页
基于Windows CE的C#简单文本编辑器.doc_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

XX大学信息科学技术学院嵌入式系统大作业设计报告项目名称基于Windows CE的C#简单文本编辑器一、设计任务2二、设计原理21、软件设计22、硬件平台3三、设计实现31、软件程序编写32、 硬件平台搭建7四、程序测试与分析14五、 运行结果23六、附录231、参考资料232、遇到的问题与解决方法233、程序清单254、课程体会30姓名: 学号:班级:日期:2011年6月21日一、设计任务 本课程大作业的设计任务是利用Visual Studio 2005编写一个可运行在Windows CE操作系统下的C#应用程序。该应用程序是一个简单的文本编辑器,类似简单的记事本,可以实现文本新建、打开、保存、另存为、退出、撤销、剪切、复制、黏贴、统计字数、左对齐、右对齐、居中、关于等基本功能。二、设计原理 1、软件设计 利用Visual Studio 2005集成开发环境,利用控件创建窗体、菜单栏和菜单选项等,并编辑添加代码以实现相应的功能,最后完成C#应用程序的设计,并在VS2005中进行本地调试。记事本关于(About)文件(File)编辑(Edit)格式(Format)以下是简单文本编辑器的软件设计图: 编辑(Edit)CopyUndoCutPaste爱上文件(File)SaveNewOpenSave as爱上Exit格式(Format)CopyCharatersCutPaste爱上Alignment2、硬件平台 Windows CE介绍: WindowsCE是微软公司嵌入式、移动计算平台的基础,它是一个开放的、可升级的32位嵌入式操作系统,是基于掌上型电脑类的电子设备操作系统,它是精简的Windows 95,Windows CE的图形用户界面相当出色。 Windows CE具有模块化、结构化和基于Win32应用程序接口和与处理器无关等特点,不仅继承了传统的Windows图形界面,并且在Windows CE平台上可以使用Windows 95/98上的编程工具(如Visual Basic、Visual C+等)、使用同样的函数、使用同样的界面风格,使绝大多数的应用软件只需简单的修改和移植就可以在Windows CE平台上继续使用。 平台搭建:通过建立PC机与Windows CE实验箱间的连接下载已定制好的操作系统镜像NK.bin启动Windows Embedded CE 6.0操作系统。三、设计实现1、软件程序编写第一步:启动Microsoft Visual Studio 2005,在Visual Studio IDE中单击File | New | Projects 菜单,在弹出的对话框左边的Project types(工程类型)中展开Other Languages | Visual C# | Smart Device, 选择Windows CE 5.0,在对话框右边的Templates(模板)中选择Device Application;在对话框的下面的Name保持默认名字以及工程所保存的位置E:,单击OK按钮。第二步:在窗体上单击右键,选择Properties菜单,在Text属性项输入“记事本”,在Name属性项中输入“Form1” 第三步:在窗体上分别添加一个mainMenu控件,一个textBox控件。第四步:将textBox控件的Multiline属性改为“true”,修改Form1的MaximizeBox属性为“false”,为mainMenu添加如下菜单,如下四个图所示: (图一修改Multiline属性和图二修改Form1的MaximizeBox属性)(图三)(图四)(图五)第五步:分别双击mainMenu中File下的New,Open,Save,Save as,Exit和Edit下的Undo,Cut,Copy,Paste还有Format下的Characters,Alignment下的Left,Right,Center还有About,在系统自动生成的代码框架分别填入代码.(具体代码在附录里的程序清单中)。第六步:保存所有修改的内容,然后在Visual Studio菜单中选择Build textedit或选择Build Solution 菜单,编译测试工程。第七步:利用USB线将目标平台与PC机相连,连通ActiveSync;【图12】ActiveSync自动连接 第八步:按F5,在弹出的Deploy对话框的Device列表框中选择xsbase270 ARMV4I Device,然后按“Deploy”按钮,测试程序自动下载到目标平台上运行。(最后运行的结果在第五部分给出)2、 硬件平台搭建首先,通过网线连接PC机和实验箱,修改PC机IP地址使其与实验箱设备处于同一网段,方便以后的下载。在PC机上新建超级终端,测试PC机与实验箱是否可以连通。可以连通的话,则启动了Windows Embedded CE 6.0操作系统,如下图: 如果没有出现以上界面,则说明还没烧写好eboot.nbo以及下载定制好的NK.bin。需要按照以下步骤来下载并启动WinCE操作系统。第一步:把Training工程中的“Eboot.nb0”复制到jflash工具目录下:例如工程所在目录为“E:WINCE600OSDesignsTraningTraningRelDirXSBase270_ARMV4I_Release”,jflash工具的目录为“D:Jflash_Pxa2700G_P30”。 XSbase270_ARMV4I_Release 目录 Jflash烧写目录第二步:在jflash工具目录双击 “cmd.bat”,打开命令行窗口。 Jflash 目录 cmd 命令行第三步:打开目标平台电源,在命令行窗口输入“jflashmm pxa270 eboot.nb0”,下载Bootloader引导程序,在进行选择时,请选择“N”。 Jflash 烧写过程第四步:最后在命令窗口出现“Verification successful!”时,说明下载已成功。如果出现“verify error at address ”,则需要断开目标平台电源,重复第2、第3步。 Jflash 烧写完成选项第五步:从“开始-所有程序-附件-通讯-超级终端”新建一个超级终端链接。【图32】超级终端连接描述第六步:选择连接串口,并将串口波特率设为:38400,数据流选择“无”,按“确定”按钮 g 超级终端设置选项超级终端成功设置菜单第七步:确定一下PC与目标平台的串口接口线已接上,然后打开平台电源开关,Bootloader程序时,按空格键进入Eboot的菜单选项中。 超级终端显示Boot Loader 启动菜单选项第八步:启动Visual Studio 2005,打开实验3-2编译好的Training工程,在Target-connectivity Option中打开映象的下载配置选项。 Connectivity Options 菜单选项第九步:在Download与Transport 选项都选择“Ethernet”.在Debugger中选择“None”. Target Device Connectivity Options 选项第十步:点击Download选择右边的“Settings”,让PB来检测设备名。 Ethernet download Settings 设置选项第十一步:用网线连通PC和目标平台,将PC和目标平台的网络连接设置在同一网段,根据超级终端的Eboot菜单提示,选取“D”项,即按键盘上的D键。 目标平台发送广播包选项第十二步:在Ethernet Download Settings中,就可以自动检测到目标设备名,点击“Active Devices”中的设备名就可以把设备名添加到“Device Boot Name”中去。然后点击“OK”,再点“Apply”按钮,然后按“Close”按钮关闭“Target Device connectivity Options”窗口. 检测连接选项第十三步:从Visual Studio2005的Target-Attach Device菜单中,连接目标平台。 Attach device 菜单选项第十四步:在弹出的下载窗口就可以看到NK下载的进度。 NK下载过程第十五步:在超级终端上,可以看到写flash的进度。 Flash拆除选项第十六步:操作系统映像下载完毕后,Windows Embedded CE 6.0操作系统自动启动。Windows CE 启动完成启动界面四、程序测试与分析 在程序的编写过程中我们虽然遇到了一些问题,但是经过努力也已经解决(具体的问题和解决方法在附录中的第2点中提到).下面我们来对程序进行简单的测试,在Windows CE下运行程序,对各个部分进行测试:(1) 程序初始状态程序刚开始运行的时候的状态如图所示:(图4.1)由于程序刚开始初始化的时候的程序是这样的,如图所示代码:把Save,Save as,Edit,Format的Enabled属性都设置为false,还有textBox1的ReadOnly属性设置为true对照图4.1可知运行结果正确。(2) 对菜单New的测试按下New菜单后Save,Save as,Edit,Format的Enabled属性都设置为true,还有textBox1的ReadOnly属性设置为false窗体的Text=未命名文本编辑器,代码如下: menuItem2.Enabled = true; menuItem3.Enabled = true; menuItem6.Enabled = true; menuItem7.Enabled = true; textBox1.ReadOnly = false;this.Text = 未命名文本编辑器;与实际运行的结果(图4.2)对照,结果正确(图4.2)(3) 对菜单Open的测试按下Open菜单会弹出一个对话框,对话框中的文件类型选择内同有rtf.File(*.rtf)和All File(*.*)选中你要打开的文件之后窗体的Text为你所要打开的文件的名字加文本编辑器,具体实现的代码如下:openFile1.Filter = rtf.File(*.rtf)|*.rtf|All File(*.*)|*.*;this.Text = Path.GetFileName(openFile1.FileName) + 文本编辑器;与实际运行的结果(图4.3)对照,结果正确(图4.3)(4) 对菜单Save的测试按下菜单Save时,如果文件原来不存在,那它就会弹出一个对话框,让你选择保存路径,和填写文件名,如果文件原来存在它就会把文本框里的内容写到文件中并保存在原路径下。通过测试得知实际的结果和编程所要预期的结果一致(如图4.4)。(图4.4)(5) 对菜单Save as的测试按下菜单Save as时,它就会弹出一个对话框,让你选择保存路径,和填写文件名,单击ok之后文件就会出现在你所要保存的路径下面,通过实际的测试可知结果和编程所要预期的结果一致。(图4.4)(具体实现的代码在附录中的程序清单中有)(6) 对菜单Exit的测试按下菜单Exit时,如果文件内容没有发生改变的时候,直接退出程序,如果文件内容发生更改的时候,就会弹出一个保存文件对话框,实现判断文件是否发生更改的代码如下:if (textBox1.Modified = true)与实际运行的结果进行对照可知,结果正确。(图4.5)(图4.5)(7) 对菜单Undo的测试当做完一个动作之后,按下Undo菜单键时之前所做的动作会被取消掉,具体实现的代码如下:textBox1.Undo();通过实际的测试可知结果和编程所要预期的结果一致。(8) 对菜单Cut的测试当你选中你要剪切的文件内容之后,按下Cut按钮时,你所选中的内容会不见,而且Copy和Cut的Enabled属性为false此时所选中的内容保存在静态变量s中,具体实现代码如下: s = textBox1.SelectedText; textBox1.SelectedText = ; menuItem11.Enabled = false;menuItem12.Enabled = false;通过实际的测试可知结果和编程所要预期的结果一致。(9) 对菜单Copy的测试当你选中你要剪切的文件内容之后,按下Copy按钮时,Copy和Cut的Enabled属性为false此时所选中的内容保存在静态变量s中,具体实现代码如下: s = textBox1.SelectedText; menuItem11.Enabled = false;menuItem12.Enabled = false;通过实际的测试可知结果和编程所要预期的结果一致。(10) 对菜单Paste的测试当按下菜单Paste的时候,会在你所选中位置上出现你刚刚剪切或复制的那段内容,而且Cut和Copy的Enabled的属性为true具体实现的代码如下: textBox1.SelectedText = s; menuItem11.Enabled = true; menuItem12.Enabled = true; 通过实际的测试可知结果和编程所要预期的结果一致。(11) 对菜单Characters的测试当你选中你所要计算字数的文本内容以后,按下菜单Characters的时候,程序会弹出一个消息框里面的内容是字数为多少,消息框的名字为文件加窗体的Text的内容,具体的实现代码如下: int n = textBox1.SelectedText.Length; DialogResult result1 = new DialogResult(); result1 = MessageBox.Show(字符数为: + n, 文件 + this.Text, MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1);通过实际的测试可知结果和编程所要预期的结果一致。(12) 对菜单Left的测试当选中菜单Left时,文本框里的内容会左对齐,具体实现代码如下:textBox1.TextAlign = HorizontalAlignment.Left;通过实际的测试可知结果和编程所要预期的结果一致。(图4.6)(图4.6)(13) 对菜单Right的测试当选中菜单Right时,文本框里的内容会右对齐,具体实现代码如下:textBox1.TextAlign = HorizontalAlignment.Right;通过实际的测试可知结果和编程所要预期的结果一致。(图4.6)(14) 对菜单Center的测试当选中菜单Center时,文本框里的内容会居中对齐,具体实现代码如下:textBox1.TextAlign = HorizontalAlignment.Center;通过实际的测试可知结果和编程所要预期的结果一致。(图4.7)(图4.7)(15) 对菜单About的测试当点击菜单About的时候,会弹出一个消息框,消息框的名字为“关于”,内容是“这是一个简单的记事本”,具体的实现代码如下: DialogResult result1 = new DialogResult(); result1 = MessageBox.Show(这是一个简单的记事本, 关于, MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1);通过实际的测试可知结果和编程所要预期的结果一致。(图4.8)(图4.8)5、 运行结果经过在Visual Studio2005环境中测试和排错后,应用程序没有出现错误。PC机和实验箱建立连接后,在VS2005中启动Debug按钮,选择相应设置,C#应用程序顺利运行在Windows CE系统上,运行结果如下图:六、附录1、参考资料 C# 从入门到精通(第二版)王小科、徐薇等 清华大学出版社嵌入式系统设计与开发马文华主编 科学出版社2、遇到的问题与解决方法(1)在编程时发现有些函数在Windows下面和在Windows CE下面不一样,例如,DialogResult在Windows下可以这样用: DialogResult result = new DialogResult(); result =MessageBox.Show(文件 + this.Text + 内容已更改,是否需要保存?, 保存提示, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Asterisk) ;但是在wince下就会出现如下的错误经过上网查找其中Show方法要采用五个参数的重载才可以(具体如下所示) result = MessageBox.Show(文件 + this.Text + 内容已更改,是否需要保存?, 保存提示, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1);在Windows环境下面OpenFileDialog和SaveFileDialog 有Title和DefaultExt属性,可是在wince环境下却没有。又如在Windows环境下有richTextBox这个控件,可是Windows CE却没有,本来程序设计是要用它作为文本输入的控件,最后只能用textBox来代替,而且如果有richTextBox在读写文件的时候会很方便,直接写如下代码就可以搞定:a读文件:richTextBox1.LoadFile(openFile1.FileName, RichTextBoxStreamType.RichText );b写文件:richTextBox1.SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.RichText );而用了textBox后读文件就要改成如下方式: StreamReader din = File.OpenText(openFile1.FileName); String str; while (str = din.ReadLine() != null) textBox1.Text = textBox1.Text + str + rn; din.Close();写文件就要改成: StreamWriter sw = new System.IO.StreamWriter(saveFileDialog1.FileName, false);/重写该文件,不存在则创建 sw.Write(textBox1.Text.ToString(); sw.Close();还有本来我们想要添加一个快捷菜单的,虽然在仿真器上可以看到效果(如下图所示)但是在实际硬件上运行的时候却没有,所以最后我们只有放弃这个想法。(2)在编写程序和调试的过程中,当新建(New)完一个记事本的时候,去按粘贴键即Paste键的时候会出现这样的错误提示,如下图所示:这是因为刚开始的时候,用来存放粘贴内容的静态变量s为NULL,所以想到的解决办法就是刚开始初始化的时候先把Paste的Enabled属性设置为false,然后在当s不为空时,再把它设为true,如图是对程序的具体改动(红色边框处为修改内容)。3、程序清单using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.IO;namespace DeviceApplication3 public partial class Form1 : Form public Form1() InitializeComponent(); menuItem2.Enabled = false; menuItem3.Enabled = false; menuItem6.Enabled = false; menuItem7.Enabled = false; menuItem13.Enabled = false; textBox1.ReadOnly = true; private string fileAdress = 未命名.rtf; private static string s = null; /New新建 private void menuItem4_Click(object sender, EventArgs e) menuItem2.Enabled = true; menuItem3.Enabled = true; menuItem6.Enabled = true; menuItem7.Enabled = true; textBox1.ReadOnly = false; DialogResult result = new DialogResult(); if (textBox1.Modified = true) result = MessageBox.Show(文件 + this.Text + 内容已更改,是否需要保存?, 保存提示, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1); if (result = DialogResult.Yes) this.menuItem6_Click(sender, e); if (result = DialogResult.Cancel) return; textBox1.Text = ; this.Text = 未命名文本编辑器; textBox1.Modified = false; /Open打开 private void menuItem5_Click(object sender, EventArgs e) menuItem2.Enabled = true; menuItem3.Enabled = true; menuItem6.Enabled = true; menuItem7.Enabled = true; textBox1.ReadOnly = false; DialogResult result = new DialogResult(); if (textBox1.Modified = true) result = MessageBox.Show(文件 + this.Text + 内容已更改,是否需要保存?, 保存提示, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1); if (result = DialogResult.Yes) this.menuItem6_Click(sender, e); else if (result = DialogResult.Cancel) return; OpenFileDialog openFile1 = new OpenFileDialog(); /openFile1.DefaultExt = *.rtf; openFile1.Filter = rtf.File(*.rtf)|*.rtf|All File(*.*)|*.*; if (openFile1.ShowDialog() = System.Windows.Forms.DialogResult.OK & openFile1.FileName.Length 0) StreamReader din = File.OpenText(openFile1.FileName); String str; while (str = din.ReadLine() != null) textBox1.Text = textBox1.Text + str + rn; ; din.Close(); this.Text = Path.GetFileName(openFile1.FileName) + 文本编辑器; fileAdress = openFile1.FileName; textBox1.Modified = false; /Save保存 private void menuItem6_Click(object sender, EventArgs e) if (this.Text = 未命名文本编辑器) SaveFileDialog saveFileDialog1 = new SaveFileDialog(); /saveFileDialog1.Title = 保存; saveFileDialog1.FileName = 未命名.rtf; saveFileDialog1.Filter = rtf Document(*.rtf)|*.rtf|All Files(*.*)|*.*; /saveFileDialog1.DefaultExt = *.rtf; if (saveFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK & saveFileDialog1.FileName.Length 0) /保存的实现 StreamWriter sw = new System.IO.StreamWriter(saveFileDialog1.FileName, false);/重写该文件,不存在则创建 sw.Write(textBox1.Text.ToString(); sw.Close(); textBox1.Modified = false; this.Text = Path.GetFileName(saveFileDialog1.FileName) + 文本编辑器; fileAdress = saveFileDialog1.FileName; else StreamWriter sw = new System.IO.StreamWriter(fileAdress, false);/重写该文件,不存在则创建 sw.Write(textBox1.Text.ToString(); sw.Close(); textBox1.Modified = false; /Save as另存为 private void menuItem7_Click(object sender, EventArgs e) SaveFileDialog saveFileDialog1 = new SaveFileDialog(); /saveFileDialog1.Title = 另存为; /saveFileDialog1.DefaultExt = *.rtf; saveFileDialog1.FileName = ; saveFileDialog1.Filter = Text Document(*.rtf)|*.rtf|All Files(*.*)|*.*; if (saveFileDialog1.ShowDialog() = DialogResult.OK & saveFileDialog1.FileName.Length 0) StreamWriter sw = new System.IO.StreamWriter(saveFileDialog1.FileName, false);/重写该文件,不存在则创建 sw.Write(textBox1.Text.ToString(); sw.Close(); fileAdress = saveFileDialog1.FileName; /Exit退出 private void menuItem8_Click(object sender, EventArgs e) DialogResult result = new DialogResult(); if (textBox1.Modified = true) result = MessageBox.Show(文件 + this.Text + 内容已更改,是否需要保存?, 保存提示, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1); if (result = DialogResult.Yes) this.menuItem6_Click(sender, e); else if (result = DialogResult.Cancel) return; Application.Exit(); /Undo撤销 private void menuItem9_Click(object sender, EventArgs e) textBox1.Undo(); /Cut剪切 private void menuItem11_Click(object sender, EventArgs e) s = textBox1.SelectedText; textBox1.SelectedText = ; menuItem11.Enabled = false; menuItem12.Enabled = false; menuItem13.Enabled = true; /Copy复制 private void menuItem12_Click(object sender, EventArgs e) s = textBox1.SelectedText; menuItem11.Enabled

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论