默认字体、字号、背景色、前景色都是保存在Option.xml文件中。
<?
xml
version
=
"1.0"encoding="utf-8" ?>
<
settings
>
<
fontname
>
微软雅黑
</
fontname
>
<
fontsize
>
20</fontsize>
<
fontcolor
>
Black</fontcolor>
<
backcolor
>
White</backcolor>
<
wordwrap
>
false</wordwrap>
</
settings
>
l AppHelper的实现
///
<summary>
///
应用程序辅助类,保存、加载应用程序配置信息
///
</summary>
public
class AppHelper {
public static Font DefaultFont; //
默认字体
public static Color FontColor; //
默认字体颜色
public static Color BackColor; //
文本框背景颜色
public static bool WordWrap; //
自动换行
private static string xmlFilename = "Option.xml";
///<summary>
///
加载应用程序配置信息
///</summary>
public static void LoadSettings() {
XmlDocument doc = new XmlDocument();
doc.Load(xmlFilename);//
加载
xml
文件
//
读取
fontname
节点
string fontname = "
宋体
"
;
XmlNode fontnameNode = doc.SelectSingleNode("//fontname");
if (fontnameNode != null) {
fontname = fontnameNode.InnerText;
}
//
读取
fontsize
节点
float fontsize = 10;
XmlNode fontsizeNode = doc.SelectSingleNode("//fontsize");
if (fontsizeNode != null) {
fontsize = Convert.ToSingle(fontsizeNode.InnerText);
}
//
读取
fontcolor
节点
DefaultFont = new Font(fontname, fontsize);
string fontcolor = "Black";
XmlNode fontcolorNode = doc.SelectSingleNode("//fontcolor");
if (fontcolorNode != null) {
fontcolor = fontcolorNode.InnerText;
}
FontColor = Color.FromName(fontcolor);
//
读取
backcolor
节点
string backcolor = "White";
XmlNode backcolorNode = doc.SelectSingleNode("//backcolor");
if (backcolorNode != null) {
backcolor = backcolorNode.InnerText;
}
BackColor = Color.FromName(backcolor);
}
///<summary>
///
保存应用程序配置信息
///</summary>
public static void SaveSettings() {
XmlDocument doc = new XmlDocument();
doc.Load(xmlFilename);
XmlNode fontnameNode = doc.SelectSingleNode("//fontname");
if (fontnameNode != null) {
fontnameNode.InnerText = DefaultFont.Name;
}
XmlNode fontsizeNode = doc.SelectSingleNode("//fontsize");
if (fontsizeNode != null) {
fontsizeNode.InnerText = DefaultFont.Size.ToString();
}
XmlNode fontcolorNode = doc.SelectSingleNode("//fontcolor");
if (fontcolorNode != null) {
fontcolorNode.InnerText = FontColor.Name;
}
XmlNode backcolorNode = doc.SelectSingleNode("//backcolor");
if (backcolorNode != null) {
backcolorNode.InnerText = BackColor.Name;
}
//
保存
xml
更改
doc.Save(xmlFilename);
}
}
这里的成员变量为什么要使用static呢?
static类型变量使得即使创建多个AppHelper实例,静态变量仍只有一个,多个实例共享同一个变量。因为对于应用程序而言,整体的配置信息没必要创建多个实例对象,而是针对一个应用程序,只有一个实例。
l 加载系统的所有字体
int
selectedIndex = -1;
for
(int i = 0; i < FontFamily.Families.Length; i++) {
FontFamily family = FontFamily.Families[i];
cboFontFamily.Items.Add(family.Name);
if (family.Name == AppHelper.DefaultFont.Name) {
selectedIndex = i;
}
}
cboFontFamily.SelectedIndex = selectedIndex;
l 在组合框中添加颜色块,需要改写组合框的DrawItem事件
private
void cboColor_DrawItem(object sender, DrawItemEventArgs e) {
Rectangle re = e.Bounds;
if (e.Index >= 0) {
if (e.State == DrawItemState.Selected) {
e.Graphics.FillRectangle(SystemBrushes.Highlight, re);
} else {
e.Graphics.FillRectangle(SystemBrushes.Window, re);
}
StringFormat sf = new StringFormat();
sf.Alignment = StringAlignment.Near;
string s = (string)(((ComboBox)sender).Items[e.Index]);
Rectangle rd = new Rectangle(re.X + 2, re.Y + 2, 20, re.Height - 4);
Rectangle rt = new Rectangle(re.X + 24, re.Y + 2, re.Width - 20, re.Height - 4);
e.Graphics.FillRectangle(new SolidBrush(Color.FromName(s)), rd);
e.Graphics.DrawRectangle(new Pen(Color.Black), rd);
if (e.State == DrawItemState.Selected) {
e.Graphics.DrawString(s, new Font("
宋体
"
, 9), new SolidBrush(Color.White), rt, sf);
} else {
e.Graphics.DrawString(s, new Font("
宋体
"
, 9), new SolidBrush(Color.Black), rt, sf);
}
}
}
至此,我们完成了《MyNotepad》的大部分内容,当然还有很多进行扩充或者优化的。比如:实现搜索、替换,状态栏,显示文字的行号,图片设置等等。
希望有兴趣,且有能力的读者能继续完善它。
谢谢您的阅读!