C#——《C#语言程序设计》实验报告——Windows桌面编程文件与流——简易记事本

一、实验目的

  1. 掌握文件类的使用;
  2. 掌握文件流的操作;
  3. 掌握二进制数据、文本数据的读写;
  4. 继续应用WPF技术进行界面编程。

二、实验内容

  1. 写一个记事本程序:

(1)设计界面,向窗体添加下拉式菜单、多格式文本框(RichTextBox)。

(2)依次为“文件”下的“新建”、“打开”、“保存”菜单项的Click事件添加事件处理函数。可以使用路由命令。

(3)添加“格式”工具栏,可以设置所有文字的粗体、斜体、大小、颜色等样式。

(4)实现文本文件的打开、编辑和保存功能;

提示

1、窗口可用DockPanel进行布局,让菜单和工具栏都位于顶部,即:

DockPanel.Dock="Top"

2、文本文件的编辑可以使用TextBox控件。

3、使用命令绑定,让菜单项和工具栏同时与一个操作相关联。

在MainWindow.xaml的Window标签下加:

    

在菜单项添加:

        

在工具栏添加:

            

就可绑定命令。同时Ctrl+O等键盘组合也默认与Open命令相绑定。

其中NewCommand_Executed需要作为一个事件响应方法来实现。

4、添加bool类型_saved字段,标记当前内容是否已保存。(文本格式不属于文件内容,修改格式不会导致_saved字段的改变)

5、打开文件时,弹出打开文件对话框,操作代码如下:

           OpenFileDialog dlg = new OpenFileDialog();dlg.DefaultExt = "*.txt";dlg.Filter = "Text Files (*.txt)|*.txt";bool? result = dlg.ShowDialog();if (result == true){string fileName = dlg.FileName;}

自此可对该文件名进行操作。

6、保存文件时,实际可实现“另存为”功能。弹出保存文件对话框,操作代码如下:

            SaveFileDialog saveFileDialog = new SaveFileDialog();saveFileDialog.Filter = "文本文件|*.txt|所有文件|*.*";saveFileDialog.FilterIndex = 0;bool? result = saveFileDialog.ShowDialog();if (result == true){string strFile = saveFileDialog.FileName;}

自此可对该文件名进行操作。

7、可以根据自己的想法,添加更加丰富的功能。

源代码 

XAML


CS

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Microsoft.Win32;namespace Homework11
{/// /// MainWindow.xaml 的交互逻辑/// public partial class MainWindow : Window{private bool _saved;private string title {set { Title = value; }get { return Title; }}public MainWindow(){InitializeComponent();}private void NewCommand_Executed(object sender, ExecutedRoutedEventArgs e){_saved = false;TextRange range;range = new TextRange(MainTextBox.Document.ContentStart, MainTextBox.Document.ContentEnd);range.Text = "";}private void OpenCommand_Executed(object sender, ExecutedRoutedEventArgs e){OpenFileDialog dlg = new OpenFileDialog();dlg.DefaultExt = "*.txt";dlg.Filter = "Text Files (*.txt)|*.txt";bool? result = dlg.ShowDialog();string str=null;if (result == true){string _fileName = dlg.FileName;TextRange range;FileStream fStream;if (File.Exists(_fileName)){title = _fileName;range = new TextRange(MainTextBox.Document.ContentStart, MainTextBox.Document.ContentEnd);fStream = new FileStream(_fileName, FileMode.OpenOrCreate);range.Load(fStream, DataFormats.XamlPackage);fStream.Close();}}}private void SaveCommand_Executed(object sender, ExecutedRoutedEventArgs e){if (_saved) {return;}SaveFileDialog saveFileDialog = new SaveFileDialog();saveFileDialog.Filter = "文本文件|*.txt|所有文件|*.*";saveFileDialog.FilterIndex = 0;bool? result = saveFileDialog.ShowDialog();if (result == true){string strFile = saveFileDialog.FileName;TextRange range;FileStream fStream;range = new TextRange(MainTextBox.Document.ContentStart, MainTextBox.Document.ContentEnd);fStream = new FileStream(strFile, FileMode.Create);range.Save(fStream, DataFormats.XamlPackage);fStream.Close();_saved = true;MainStatusBar.Text = "保存到" + strFile;}}private void PrintCommand_Executed(object sender, ExecutedRoutedEventArgs e){PrintDialog pd = new PrintDialog();if ((pd.ShowDialog() == true)){//use either one of the belowpd.PrintVisual(MainTextBox as Visual, "printing as visual");pd.PrintDocument((((IDocumentPaginatorSource)MainTextBox.Document).DocumentPaginator), "printing as paginator");}}private void MainTextBox_TextChanged(object sender, TextChangedEventArgs e){_saved = false;}private void LineCommand_Executed(object sender, ExecutedRoutedEventArgs e){}private void FontSelectCommand_Executed(object sender, ExecutedRoutedEventArgs e){}}
}

运行结果

三、实验心得与体会

  1. 掌握文件类的使用;
  2. 掌握文件流的操作;
  3. 掌握二进制数据、文本数据的读写;
  4. 继续应用WPF技术进行界面编程;
  5. 掌握RichTextBox控件的使用;
  6. 掌握对话框的使用。

参考文章

https://docs.microsoft.com/zh-cn/dotnet/framework/wpf/controls/richtextbox-overview#save-load-and-print-richtextbox-content

https://blog.csdn.net/u011389706/article/details/55805476

https://blog.csdn.net/weixin_43272781/article/details/106284772

https://www.jianshu.com/p/9c30b5097a3f

https://www.cnblogs.com/arxive/p/5725570.html


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部