昨天做到很晚,1点20才收工。
卡在一个bug上,‘新建’时会出现死循环,还没搞清是什么原因。
那么以时间序整理下昨晚的工作。
笔记(一)中的几个思路到了真正实践的过程中才发现那个另存方法完全是多余的。
系统生成的就是一个方法,所以无需多此一举。
打开vs,顺着自己想好的思路,先做‘另存’按钮,这里vs提供了一个saveFileDialog控件,我的理解是打开一个通用对话框,创建文件并打开,返回这个文件的句柄,这里用引用可能更合适些,那么就是返回对该空文件的引用吧,接着用到系统的输入输出流,查书得知为System.IO命名空间下的Stream类。
使用Stream类声明一个对象Stream,再调用StreamWriter类,声明对象sw,将richTextBox.Rtf写入到文件中。
private void 另存为AToolStripMenuItem_Click(object sender, EventArgs e)
{
saveFileDialog1.ShowDialog();
}
private void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
{
Stream Stream =saveFileDialog1.OpenFile();
StreamWriter sw = new StreamWriter(Stream);
sw.Write(richTextBox1.Rtf);
sw.Close();
Stream.Close();
}
接着是‘保存’。
保存时需判断是否为打开的文件,是则直接写入流,否则弹出另存对话框。
在这里我引入了一个变量path,初始值为空,当打开文件时,给path赋值文件路径。这样,判断是否为打开的文件,只需判断path是否为空。
private void 保存SCtrlSToolStripMenuItem_Click(object sender, EventArgs e)
{
if (path == "")
{
saveFileDialog1.ShowDialog();
}
else {
StreamWriter sw = new StreamWriter(path);
sw.Write(richTextBox1.Rtf);
sw.Close();
}
}
为了验证这段代码,我紧接着写了‘新建’。
新建时要判断文件是否有修改或者为空,当为空或者有修改的情况下,弹出对话框询问是否保存。
private void 新建NCtrlNToolStripMenuItem_Click(object sender, EventArgs e)
{
if (richTextBox1.Rtf == "" || richTextBox1.CanUndo == false)
{
richTextBox1.Rtf = "";
path = "";
}
else {
Form2 frm = new Form2();
frm.ShowDialog();
}
}
此处对话框为模态对话框,弹出对话框时,不能对Form1操作。不打算赘述这个过程。
对话框有‘保存’,‘不保存’和‘取消’按钮,这里需要对Form1的空间操作,Form1和Form2是两个类,在Form2中操作,需注意声明一个Form1的对象,然后调用Form1中的方法,把‘保存’方法改为public。
public void 保存SCtrlSToolStripMenuItem_Click(object sender, EventArgs e)
{
if (path == "")
{
saveFileDialog1.ShowDialog();
}
else {
StreamWriter sw = new StreamWriter(path);
sw.Write(richTextBox1.Rtf);
sw.Close();
}
}
编码过程中,发现无法直接对richTextBox1操作,在Form1的设计代码中将控件属性改为public也不行,于是,我在Form1中添加了newrtf方法。
public void newrtf() {
richTextBox1.Rtf = "";
path = "";
}
调用该方法,代码中终于没有错误了。Debug。
点击‘新建’,观察到richtextbox一遍遍刷新,然后程序无响应。
出bug了。vs提示询问是否有无限堆栈,仔细看了自己的代码,应该是没有循环的,直到现在毫无头绪。
分享到:
相关推荐
总的来说,"东北大学秦皇岛分校c#大作业——电子笔记本"是一个很好的实践项目,它将理论知识与实际操作相结合,帮助学生在实践中提高编程能力。通过这样的动手练习,相信同学们能够深入理解C#语言,并能独立完成类似...
标签“c#记事本 记事本 notebook”进一步确认了项目是使用C#语言实现的一个桌面应用,目标是创建一个类似系统自带的记事本程序。C#是一种由微软开发的面向对象的编程语言,广泛用于构建Windows桌面应用、Web应用和...
c#学习笔记(1) 51099在线学习网发布 文章来源:网络收集 发布时间:2006-05-25 字体: [大 中 小] 51099在线学习网 http://www.51099.com 1, 结构(struct) 与 类(class) [attributes] [modifiers] struct ...
《C#笔记本——初学者的编程宝典》 在编程世界中,C#是一门强大且广泛应用的语言,尤其在Windows平台上的开发工作中占有重要地位。本文将深入探讨刘鹏的C#学习资源,这个名为“c#笔记本”的源码程序,它为编程新手...
标题中的“记事本程序”指的是一个基于C#.NET编程语言开发的应用程序,它模仿了操作系统中常见的文本编辑工具——记事本。记事本程序是初学者学习编程时经常模仿构建的一个简单项目,因为它涉及到基础的文件读写、...
在这个“treeview与listview组合使用的电子记事本”项目中,开发者巧妙地结合了两种常见的Windows Forms控件——TreeView和ListView,以创建一个功能丰富的文本编辑器。这个应用不仅具备基本的文本编辑功能,还利用...
随着科技的发展,个人笔记工具已经从传统的纸质便签、记事本转变为数字化软件应用。在这样的背景下,开发一款便携且易用的文献记录工具显得尤为重要。本文将详细介绍这样一款用C#编写的小程序——“C# 便条笺”。它...
【我的记事本】可能是该项目中的一个核心文件,它可能是实现的一个简单文本编辑器或者记录代码笔记的应用。在C#中,可以使用System.IO命名空间下的StreamReader和StreamWriter类来读写文本文件,实现基本的记事本...
《构建Windows Phone平台的C#记事本应用》 在移动设备领域,Windows Phone操作系统虽然市场份额相对较小,但仍有其独特的用户群体。针对这一平台,开发者可以利用C#语言进行应用程序开发,为用户提供丰富的功能和...
程序设计课程项目实验报告主要围绕使用XAML和C#开发Windows桌面应用——一款名为"Wind桌面日历"的软件进行,旨在提升学生的编程能力和面向对象的思维。在实验过程中,学生需要掌握WPF(Windows Presentation ...