编写一个写字板初步了解Winform编程(三)——代码设计
来源:互联网 发布:数据结构和算法的关系 编辑:程序博客网 时间:2024/06/05 20:34
写字板程序的所有功能几乎都是围绕richTextBox这个控件的,所以我们这边设计的代码都是关于richTextBox这个控件的方法属性的使用。当然还有一些其他基本控件的使用。如果有过java swing编程基础或者编写过VB等程序就很容易理解。
主要就是粘贴代码,对于一些重要部分做出解释。
打开文件:
private void 打开ToolStripMenuItem_Click(object sender, EventArgs e) { openFileDialog1.Filter = "文本文件|*.txt|RTF文本文档|*.rtf|所有写字板文档|*.txt;*.rtf|所有文件|*.*"; openFileDialog1.FileName = ""; openFileDialog1.FilterIndex = 3; if (openFileDialog1.ShowDialog() == DialogResult.OK) { richTextBoxContent.Clear(); richTextBoxContent.LoadFile(openFileDialog1.FileName, RichTextBoxStreamType.RichText); CurFileName = openFileDialog1.FileName; this.Text = "C#写字板 " + CurFileName; Start = 0; } }
主要用到openFileDalog控件,这个控件用于显示一个打开文件或者文件夹的窗口,待用户选择后,调用这个控件获得的文件路径。
这里首先要对这个控件进行设置,Filter属性需要一行文本,文本格式就是上述代码,先是要显示的提醒,用“|”分割符号分割,然后显示要显示文件的通配符,如果要显示多个通配符的话就用“;”分号隔开。
FilterIndex属性用于设置默认filter是哪个,从1开始。
然后调用ShowDialog()方法显示打开文件的窗口。它的返回值是用户到底按下了哪个按钮,使用枚举类型DialogResult进行匹配。
然后就是将文件载入到richTextBox中了,我们这边使用richTextBox的LoadFile方法,第一个参数是文件路径,第二个参数是载入模式,richText表示载入富文本,包括文件中的图片和字体格式。
保存文件:
private void 保存ToolStripMenuItem_Click(object sender, EventArgs e) { if (CurFileName != string.Empty) { Save(); } else { SaveAs(); } } private void Save() { if (CurFileName == string.Empty) { SaveAs(); } else { if (CurFileName.EndsWith(".rtf")) { richTextBoxContent.SaveFile(CurFileName, RichTextBoxStreamType.RichText); } else { richTextBoxContent.SaveFile(CurFileName, RichTextBoxStreamType.PlainText); } IsModify = false; this.Text = "C#写字板 " + CurFileName; } } private void SaveAs() { SaveAs(2); } private void SaveAs(int Index) { saveFileDialog1.Filter = "文本文件|*.txt|RTF文本文档|*.rtf|所有文件|*.*"; saveFileDialog1.FilterIndex = Index; saveFileDialog1.Title = "另存为"; saveFileDialog1.FileName = ""; if (saveFileDialog1.ShowDialog() == DialogResult.OK) { if (saveFileDialog1.DefaultExt == ".rtf") { richTextBoxContent.SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.RichText); } else { richTextBoxContent.SaveFile(saveFileDialog1.FileName, RichTextBoxStreamType.PlainText); } if (CurFileName == string.Empty) { CurFileName = saveFileDialog1.FileName; IsModify = false; this.Text = "C#写字板 " + CurFileName; } } }
这边我们有一个类属性叫做CurFileName用于储存文件的默认保存位置,就和记事本一样,如果这个文件没有被指定过一次保存位置,点击保存会出现另存为的窗口,而保存过一次后,点击保存就将文件保存到之前保存过的位置上了。这个变量就是起这个效果的,如果它是空的话,就表示没有保存过,显示另存为。
这边用的saveFileDialog和openFileDialog的方法其实是一致的。
richTextBox的SaveFile与LoadFile也是类似的,这里就不做说明了。其中RichTextBoxStreamType.PlainText表示纯文本。
粘贴板操作:
private void buttonPaste_Click(object sender, EventArgs e) { richTextBoxContent.Paste(); } private void buttonCopy_Click(object sender, EventArgs e) { richTextBoxContent.Copy(); } private void buttonCut_Click(object sender, EventArgs e) { richTextBoxContent.Cut(); }粘贴板直接使用richText封装好的方法就行了,这里不做说明。
图片插入:
private void buttonPic_Click(object sender, EventArgs e) { openFileDialog1.Filter = "BMP文件|*.bmp|JPG文件|*.jpg|PNG文件|*.png|所有支持的图片文件|*.bmp;*.jpg;*.png|所有文件|*.*"; openFileDialog1.Title = "打开图片"; openFileDialog1.FilterIndex = 4; if (openFileDialog1.ShowDialog() == DialogResult.OK) { Bitmap bmp = new Bitmap(openFileDialog1.FileName);//获得图片 Clipboard.SetDataObject(bmp, false);//将图片放在剪贴板中 if (richTextBoxContent.CanPaste(DataFormats.GetFormat(DataFormats.Bitmap))) richTextBoxContent.Paste();//粘贴数据 } }图片插入的原理是先把图片加到剪贴板中,然后再粘贴到richTextBox。
openFileDialog的使用就不说了。这里定义了一个位图Bitmap,然后通过Bitmap类的构造方法构造,Clipboard.SetDataObject方法第一个参数是想要加入的对象,第二个参数是表示退出程序后不保存剪贴板数据。注意:使用这个方法本身 就会把剪贴板数据清除。
插入时间:
private void dateTimePicker1_ValueChanged(object sender, EventArgs e) { richTextBoxContent.AppendText(dateTimePicker1.Text); }值得注意的方法是richTextBox的AppendText是往文本末尾加入的。而不是插入点。
撤销、重复、搜索
private void buttonUndo_Click(object sender, EventArgs e) { if (richTextBoxContent.CanUndo) { richTextBoxContent.Undo(); } } private void buttonRedo_Click(object sender, EventArgs e) { if (richTextBoxContent.CanRedo) { richTextBoxContent.Redo(); } } private void buttonSearch_Click(object sender, EventArgs e) { int FindPos = richTextBoxContent.Find(textBoxSearchText.Text,Start + 1,RichTextBoxFinds.None); if (FindPos >= 0) { Start = FindPos; } else { MessageBox.Show("没有找到!", "提示"); } }注意点是Undo、Redo操作前一定要用CanUdo或CanRedo判断是否能撤销和重复,否则可能会发生错误。
其中FindPos是查找开始的位置,用于循环查找。否则只会查找第一个。
设置粗体、斜体、下划线、删除线
private void buttonBold_Click(object sender, EventArgs e) { SetFontStyle(FontStyle.Bold); } private void SetFontStyle(FontStyle style) { int SelectStart = richTextBoxContent.SelectionStart; int SelectLength = richTextBoxContent.SelectionLength; RichTextBox TempText = new RichTextBox(); TempText.Rtf = richTextBoxContent.SelectedRtf; for (int i = 0; i < TempText.Rtf.Length; i++) { TempText.Select(i, 1); TempText.SelectionFont = new Font(TempText.SelectionFont, TempText.SelectionFont.Style ^ style); } TempText.Select(0, TempText.Rtf.Length - 1); richTextBoxContent.SelectedRtf = TempText.SelectedRtf; richTextBoxContent.Select(SelectStart, SelectLength); richTextBoxContent.Focus(); } private void buttonItalic_Click(object sender, EventArgs e) { SetFontStyle(FontStyle.Italic); } private void buttonUnderline_Click(object sender, EventArgs e) { SetFontStyle(FontStyle.Underline); }这里有一个注意点,当选中的文本中有很多字体的时候,使用SelectionFont方法获得的字体会空。所以需要一个一个字的来判断。
还有一个就是多种字体的组合需要用异或。
获取系统已经安装的字体:
private void Form1_Load(object sender, EventArgs e) { //获取系统已经安装的字体,添加进comboBox中 InstalledFontCollection MyFont = new InstalledFontCollection(); FontFamily[] MyFontFamilies = MyFont.Families; int Count = MyFontFamilies.Length; for (int i = 0; i < Count; i++) { comboBoxInstalledFont.Items.Add(MyFontFamilies[i].Name); } //获取richTextBox默认字体 comboBoxInstalledFont.SelectedItem = richTextBoxContent.Font.Name; //获取字号 numericUpDownFontSize.Value = (decimal)richTextBoxContent.Font.Size; }当窗口载入的时候就要初始化。这个方法我也是百度来的,直接用吧。
numericUpDown控件:
private void numericUpDownFontSize_ValueChanged(object sender, EventArgs e) { richTextBoxContent.SelectionFont = new Font(comboBoxInstalledFont.Text, (float)numericUpDownFontSize.Value); }这个控件用于数字选择,可以直接输入,也可以按上下三角形加减。
它有几个重要的属性:1.Increment:增量,就是单击一下增加或者减少的数值。 2.Maximum、Minimum就是最大值和最小值
定义字体颜色和异常:
private void buttonConfirmColor_Click(object sender, EventArgs e) { try { int R = Convert.ToInt32(textBoxR.Text); int G = Convert.ToInt32(textBoxG.Text); int B = Convert.ToInt32(textBoxB.Text); richTextBoxContent.SelectionColor = Color.FromArgb(R, G, B); } catch { MessageBox.Show(this, "RGB值应该为0~255之间的数字。", "警告"); } }定义字体颜色只要修改richText的SelectionColor属性就好了。
异常与java一致,用try...catch...语句包围。
缩放:
private void buttonNormal_Click(object sender, EventArgs e) { richTextBoxContent.ZoomFactor = 1; ZoomFactor = 1; } private void buttonZoomUp_Click(object sender, EventArgs e) { ZoomFactor *= 2; if (ZoomFactor >= 64) ZoomFactor = 63; richTextBoxContent.ZoomFactor = ZoomFactor; } private void buttonZoomDown_Click(object sender, EventArgs e) { ZoomFactor /= 2; if (ZoomFactor <= 0.015625) ZoomFactor = 0.015626f; richTextBoxContent.ZoomFactor = ZoomFactor; }缩放就是调整richText的ZoomFactor属性。需要注意的是它有最大值和最小值,分别为64和0.015625,左右都开。
总结,总得来说很容易就能设计出一个符合Windows风格的winform程序。有些控件的使用千奇百怪,所以用好搜索引擎很重要。
我上传了我的项目工程,下载地址:http://pan.baidu.com/s/1dDoGYYl
- 编写一个写字板初步了解Winform编程(三)——代码设计
- 编写一个写字板初步了解Winform编程(一)——Winform程序结构
- 编写一个写字板初步了解Winform编程(二)——界面设计
- Python初步了解(三)
- [COM/ATL]COM组件编程——初步了解
- C++——面向对象编程初步了解
- JSON(1)——初步了解
- 集群—初步了解(一)
- 设计模式初步了解
- DBF文件初步了解(二)——DBF数据导出代码实现
- 初步了解极限编程
- dom编程初步了解
- SAP屏幕设计器专题:编写控件代码(三)
- SAP屏幕设计器专题:编写控件代码(三)
- 网络工程师——初步了解
- 【UML】——初步了解
- 【数据库】——初步了解
- Kotlin初步代码编写
- 【loadrunner】Web脚本录制
- Struts2项目流转走向
- 《JavaScript高级程序设计(第3版)》读书笔记(一)
- android背景选择器selector用法汇总
- quick-cocos2d-lua 中动画cc.Rect的总结
- 编写一个写字板初步了解Winform编程(三)——代码设计
- 第二阶段结束
- javascript利用FSO对XML文件操作类
- CoreText实现图文混排
- android 常用图表
- Oracle导入dmp备份文件到不同的表空间中
- abstract class和interface的区别
- POJ 2528 Mayor's posters 线段树区间更新+离散化
- OPENWRT的若干命令