C# WinForm项目_记事本

1、运行界面

窗体采用MDI容器模式,所有子窗体依赖于父窗体下
在这里插入图片描述

2、子窗体控件触发事件代码

添加 ToolStrip 工具栏,依次添加 Button 和 ComboBox 双击增加触发事件

// 窗体加载时触发事件
private void FrmChild_Load(object sender, EventArgs e)
{
    // 加载系统字体
    InstalledFontCollection myFonts = new InstalledFontCollection();
    // 获取对象数组
    FontFamily[] ff = myFonts.Families;
    ArrayList list = new ArrayList();
    // 获取数组集合长度
    int count = ff.Length;
    for (int i = 0; i< count;i++)
    {
        string FontName = ff[i].Name;
        // 写入列表字体列表控件
        toolStripComboBoxFonts.Items.Add(FontName);
    }
}
// 加粗按钮
private void toolStripButtonBold_Click(object sender, EventArgs e)
{
    // 判断当前字体是否加粗
    if(textBoxNote.Font.Bold == false)
    {
        textBoxNote.Font = new Font(textBoxNote.Font, FontStyle.Bold);
    }
    else
    {
        // 如果是已经是加粗,则改为普通文本
        textBoxNote.Font = new Font(textBoxNote.Font, FontStyle.Regular);
    }
}
// 倾斜按钮
private void toolStripButtonItalic_Click(object sender, EventArgs e)
{
    if(textBoxNote.Font.Italic == false)
    {
        textBoxNote.Font = new Font(textBoxNote.Font, FontStyle.Italic);
    }
    else
    {
        textBoxNote.Font = new Font(textBoxNote.Font, FontStyle.Regular);
    }
}
// 改变字体列表索引触发事件
private void toolStripComboBoxFonts_SelectedIndexChanged(object sender, EventArgs e)
{
    string fontName = toolStripComboBoxFonts.Text;
    float fontSize = float.Parse(toolStripComboBoxSize.Text);
    // 改变字体和字号
    textBoxNote.Font = new Font(fontName, fontSize);
}
// 改变字号列表索引触发事件
private void toolStripComboBoxSize_SelectedIndexChanged(object sender, EventArgs e)
{
    string fontName = toolStripComboBoxFonts.Text;
    float fontSize = float.Parse(toolStripComboBoxSize.Text);
    // 改变字体和字号
    textBoxNote.Font = new Font(fontName, fontSize);
}
// 改变字号触发事件(手动填写)
private void toolStripComboBoxSize_TextChanged(object sender, EventArgs e)
{
    string fontName = toolStripComboBoxFonts.Text;
    float fontSize = float.Parse(toolStripComboBoxSize.Text);
    textBoxNote.Font = new Font(fontName, fontSize);
}
// 保存按钮
private void toolStripButtonSave_Click(object sender, EventArgs e)
{
    // 当前内容不为空
    if(textBoxNote.Text.Trim() != "")
    {
        if(this.Text == "新建文本(未保存)")
        {
            // 创建筛选器,指定保存文件的类型
            saveFileDialog1.Filter = ("文本文档(*.txt)|*.txt");
            // 判断用户选择的是保存按钮还是取消按钮
            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                // 获取用户选择路径
                string path = saveFileDialog1.FileName;
                // 保存文件到指定路径
                StreamWriter sw = new StreamWriter(path, false);
                sw.WriteLine(textBoxNote.Text.Trim());
                // 清空缓存
                sw.Flush();
                sw.Close();
                // 保存后将窗体标题改为路径,表示当前文件已保存
                this.Text = path;
            }
        }
        else
        {
            string path = this.Text;
            // 判断路径前面是否带*
            if (path.Substring(0, 1) == "*")
            {
                path = path.Remove(0, 1);
            }
            StreamWriter sw = new StreamWriter(path, false);
            sw.WriteLine(textBoxNote.Text.Trim());
            sw.Flush();
            sw.Close();
            // 保存后将路径星号去掉,表示当前文件已保存
            this.Text = path;
        }
    }
    else
    {
        MessageBox.Show("当前文本框内容为空!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}
// 打开按钮
private void toolStripButtonOpen_Click(object sender, EventArgs e)
{
    openFileDialog1.Filter = ("文本文档(*.txt)|*.txt");
    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
        // 获取打开文件的路径
        string path = openFileDialog1.FileName;
        // 指定打开文件路径及编码
        StreamReader sr = new StreamReader(path, Encoding.UTF8);
        string text = sr.ReadToEnd();
        textBoxNote.Text = text;
        sr.Close();
        // 将窗体标题改为打开文件路径
        this.Text = path;
    }
}
// 当文本内容发生改变时触发事件
private void textBoxNote_TextChanged(object sender, EventArgs e)
{
    if(this.Text != "新建文本(未保存)" && this.Text.Substring(0,1)!= "*")
    {
        this.Text = "*" + this.Text;
    }
}
// 新建按钮
private void toolStripButtonCreate_Click(object sender, EventArgs e)
{
    this.Text = "新建文本(未保存)";
    textBoxNote.Text = "";
}
// 窗体关闭事件
private void FrmChild_FormClosing(object sender, FormClosingEventArgs e)
{
    if(textBoxNote.Text.Trim() != "")
    {
        string path = this.Text;
        if(path== "新建文本(未保存)" || path.Substring(0, 1) == "*")
        {
            // 获取弹出框的返回值
            DialogResult dr = MessageBox.Show("当前文本内容未保存!请确认是否退出?",
                "信息提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if(dr == DialogResult.Yes)
            {
                // 释放窗体占用的所有资源(退出)
                this.Dispose();
            }
            else
            {
                // 取消操作
                e.Cancel = true;
            }
        }
    }
}

3、父窗体控件触发事件代码

添加 MenuStrip 显示按功能分组的应用程序命令和选项
在这里插入图片描述

// 新建
private void ToolStripMenuItemNew_Click(object sender, EventArgs e)
{
    // 新建一个子窗体对象
    FrmChild child = new FrmChild();
    // 设置子窗体的父窗体
    child.MdiParent = this;
    // 打开子窗体
    child.Show();
}
// 关闭
private void ToolStripMenuItemClose_Click(object sender, EventArgs e)
{
    // 当前激活窗体对象
    Form frm = this.ActiveMdiChild;
    frm.Close();
}
// 关闭所有
private void ToolStripMenuItemCloseAll_Click(object sender, EventArgs e)
{
    // 历遍所有子窗体对象
    foreach(Form form in this.MdiChildren)
    {
        Form frm = this.ActiveMdiChild;
        frm.Close();
    }
}
// 退出
private void ToolStripMenuItemExit_Click(object sender, EventArgs e)
{
    this.Close();
}

4、总结

理解子窗体中各触发事件的逻辑关系,特别是【保存】功能的实现,需要判断文本是否新增,是否保存过。控件都使用都属于基础知识,纯属入门练手项目。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章