[C#學(xué)習(xí)筆記16]WF項目結(jié)構(gòu)、Partial部分類、窗體與事件委托使用分析
WinForm開發(fā)學(xué)習(xí)內(nèi)容:UI設(shè)計、數(shù)據(jù)庫應(yīng)用、基于C#+ADO.NET+SQLSever的系統(tǒng)開發(fā)
一、WinForm項目與窗體控件
????創(chuàng)建窗口應(yīng)用程序
????拖控件放到窗體界面中
????窗體界面按F7進(jìn)入窗體后臺程序
????雙擊界面中的控件自動生成控件單機事件方法及后臺生成將click事件和事件方法關(guān)聯(lián)
? ? 新建類MyForm.cs并繼承父窗體Form:
????????public?class MyForm:Form注意引用命名空間using?System.Windows.Froms
1.部分類的使用partial
????好處:讓自動生成的代碼后置,我們編寫程序的代碼顯得更加簡潔。
????特點:在最后編譯的時候,仍然編譯成一個窗體類。
form類構(gòu)造方法里初始化所有控件
主窗體使用FromMain命名
2.窗體和控件的基本使用、Event事件
????理解事件:
????????在.NET平臺上面,給我們所用的這些控件,封裝了很多的事件,所謂事件,就是對用戶操作的某一個行為,進(jìn)行封裝。
????????比如,當(dāng)用戶單擊一個按鈕的時候,單擊這個動作,已經(jīng)被封裝成了Click事件,那么我們只要把這個事件拿出來,
????????當(dāng)用戶觸發(fā)單擊這個動作的時候,也就是這個事件被調(diào)用了,我們就可以在這個事件中,完成我們需要的任務(wù)。
界面設(shè)計右鍵顯示菜單:
????ContextMenuScript控件拖入窗體界面中,添加相應(yīng)菜單選項,并在窗體屬性中找到相應(yīng)名字修改成右鍵對應(yīng)菜單顯示
按鍵屬性中閃電符號里面列出了按鍵的所有事件,手動將控件的事件和事件方法關(guān)聯(lián)(委托)
????this.btnTest.Click += new System.EventHandler(this.btnMyTest_Click);
事件方法:
????????private void btnMyTest_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? //sender表示當(dāng)前控件的對象
? ? ? ? ? ? //Button btn = sender as Button;
? ? ? ? ? ? Button btn = (Button)sender;
? ? ? ? ? ? MessageBox.Show(btn.Tag.ToString());
? ? ? ? ? ? //可以動態(tài)的取消事件的關(guān)聯(lián)
? ? ? ? ? ? this.btnTest.Click -= new System.EventHandler(this.btnMyTest_Click);
? ? ? ? }
雙擊閃電圖表下的對應(yīng)事件,會自動產(chǎn)生事件方法并將控件的事件和事件方法關(guān)聯(lián)
? ? ? ?鼠標(biāo)放到控件上事件方法的實現(xiàn):
?????????private void btnTest_MouseEnter(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? //Button btn = (Button)sender;
? ? ? ? ? ? //MessageBox.Show(btn.Tag.ToString());
? ? ? ? }
取消的事件,通過閃電圖表下找到對應(yīng)事件單機選擇重置即可,注意事件方法還保留著,若不移除再次自動產(chǎn)生事件方法會重新生成并+_1后綴事件方法,不會覆蓋之前的,可以手動在閃電圖表下對應(yīng)事件右側(cè)選擇可選的事件方法。
窗體常用事件:
????load窗口控件初始化完成后要執(zhí)行的事件(一般不用)
????????//窗體所有控件和初始化完畢后要執(zhí)行的事件,我們通常不用
? ? ? ? private void FrmMain_Load(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? //不建議在這里編寫初始化內(nèi)容...
? ? ? ? }
????FormClosed窗口關(guān)閉后發(fā)生
?????????private void FrmMain_FormClosed(object sender, FormClosedEventArgs e)
? ? ? ? {
? ? ? ? ? ? //可以在這個地方編寫你要做的其他任務(wù)...
? ? ? ? ? ? MessageBox.Show("窗體已經(jīng)關(guān)閉");
? ? ? ? }
????FormClosing窗體關(guān)閉前發(fā)生(關(guān)閉前加提示框確認(rèn)是否要關(guān)閉窗體)
?????????//窗體關(guān)閉之前發(fā)生的
? ? ? ? private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)
? ? ? ? {
? ? ? ? ? ? DialogResult result = MessageBox.Show("確認(rèn)要關(guān)閉窗體嗎?", "關(guān)閉確認(rèn)",?
? ? ? ? ? ? ? ? MessageBoxButtons.OKCancel,
? ? ? ? ? ? ? ? ? ?MessageBoxIcon.Question);
? ? ? ? ? ? if (result == DialogResult.Cancel)//用戶取消關(guān)閉
? ? ? ? ? ? {
? ? ? ? ? ? ? ? e.Cancel = true;
? ? ? ? ? ? }
? ? ? ? }