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