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、總結

理解子窗體中各觸發事件的邏輯關係,特別是【保存】功能的實現,需要判斷文本是否新增,是否保存過。控件都使用都屬於基礎知識,純屬入門練手項目。

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