昨天做到很晚,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# 记事本”"暗示我们将讨论的是一个使用C#语言编写的、类似于系统自带的记事本程序的源代码。描述中的"自己写的 差不多完成了 拿来和大家分享"表明这是一个个人项目,开发者已完成...
通过实现C#记事本项目,开发者不仅可以掌握C#语言的基础知识,还能了解Windows Forms应用程序的开发流程,这对于进一步学习更复杂的桌面应用开发至关重要。同时,这也是一个很好的实践项目,能够提高编程技巧和问题...
总的来说,创建C#记事本小程序是学习C#基础和Windows编程的好方法。通过这个过程,你将熟悉C#的语法,了解面向对象编程的概念,以及如何与操作系统交互进行文件操作。这只是一个简单的开始,随着技能的提升,你可以...
很详细的Nunit单元测试讲解。基于C# + Nunit,单元测试可以有效降低调试,改善代码结构,高级开发必备。
《C#记事本V2.0:超越Windows记事本的新一代文本编辑器》 在编程领域,C#是一种广泛使用的面向对象的编程语言,由微软公司开发,旨在提高软件开发的效率和代码的可读性。在这个项目中,我们聚焦于一个名为"C#记事本...
标题 "C#记事本(含汉字统计等)源代码" 暗示这是一个使用C#编程语言编写的简易记事本程序,其中包含了对汉字统计功能的实现。这个项目对于初学者来说是一个很好的学习资源,因为它展示了如何在C#环境中创建一个基本的...
总的来说,"C#记事本完整代码"项目是一个全面学习C# GUI编程、文本处理、文件I/O和事件驱动编程的实例。通过分析和修改这段代码,开发者可以深入理解C#的特性和.NET Framework的功能,进一步提升自己的编程技能。
【标题】"自制c#记事本安装包"所涉及的知识点主要集中在C#编程语言、Windows应用程序开发、软件打包与部署以及.NET Framework的基础知识上。 C#是一种面向对象的编程语言,由Microsoft公司推出,主要用于Windows...
《单元测试之道C#版——使用NUnit》是一本深入探讨C#环境下单元测试实践的著作,荣获第14届震撼大奖(Jolt Award)和生产力大奖(Productivity Award),充分体现了其在软件开发领域的影响力和实用性。本书的核心是...
本文将深入探讨C#记事本——乐言版的设计理念、实现机制以及其在学习和实践中带来的价值。 首先,C#记事本项目的核心是利用Windows Forms或WPF(Windows Presentation Foundation)框架来构建用户界面。Windows ...
综合以上信息,我们可以推断,"C#记事本"是一个用C#语言编写的文本编辑软件,它模仿了微软记事本的大部分功能,并提供了源代码,方便用户学习和定制。程序利用C#的面向对象特性,构建了类和控件,以实现文本编辑、...
《单元测试之道C#版——使用NUnit》是一本深入探讨C#开发中单元测试实践的书籍,重点围绕NUnit这一流行的开源测试框架展开。NUnit是.NET开发者进行单元测试的首选工具,它提供了丰富的断言库和测试组织结构,使得...
标题中的"C# 记事本 实现了可拖放"指的是使用C#编程语言开发的一个记事本应用程序,它具有拖放功能。这意味着用户可以将文本或其他数据从一个位置(如网页、桌面或其他应用程序)直接拖放到这个记事本程序中,而无需...
【C# 记事本程序开发详解】 C# 记事本程序是一个基础的...总之,C#记事本程序是一个学习和实践C#编程基础的良好起点,通过实际操作,开发者可以更好地理解和运用C#中的类库和控件,为后续更复杂的项目打下坚实的基础。
【C#记事本源码】是一个用于学习C#编程语言和Windows桌面应用程序开发的示例项目。这个压缩包包含了创建一个简单记事本程序的所有源代码,是初学者理解和掌握C#编程的一个良好起点。 在C#中,开发Windows桌面应用...
【C#记事本,笔记本】是一款由C#编程语言和XML技术开发的个人记事本应用程序。这个软件设计简洁,功能实用,尤其适合程序员使用。以下是对该应用及其技术实现的详细说明: 1. **C#编程语言**:C#是微软公司推出的一...
在C#编程中,开发一个具有查找和替换功能的记事本程序是一项常见的练习,它可以帮助初学者更好地理解和掌握Windows Forms应用程序的开发。这个项目主要涉及以下知识点: 1. **Windows Forms**: Windows Forms是.NET...
标题“C# 记事本程序 实现windows记事本程序的功能”表明这是一个使用C#编程语言开发的应用程序,它的主要目的是模仿并实现Windows操作系统中内置的记事本程序的功能。这意味着该程序能够处理文本编辑、保存、打开等...
通过学习和分析这个C#记事本源码,开发者可以掌握GUI应用程序的基本架构,理解如何将UI元素与业务逻辑相结合,同时也能学习到文件操作、文本处理等实用技能。这对于初学者来说,是一份很好的实践材料,能够加深对C#...
总的来说,"东北大学秦皇岛分校c#大作业——电子笔记本"是一个很好的实践项目,它将理论知识与实际操作相结合,帮助学生在实践中提高编程能力。通过这样的动手练习,相信同学们能够深入理解C#语言,并能独立完成类似...