從一個(gè)實(shí)際需求看C#的跨窗體操作
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
很多人學(xué)習(xí)C#會(huì)遇到一個(gè)這樣的問題,很多知識(shí)點(diǎn)不知道在什么情況下使用,或者面對(duì)一些需求時(shí),不知道用哪種方法來解決。在本文中,我們將結(jié)合一個(gè)實(shí)際需求來談?wù)勅绾芜x擇合適的方法來更合理的實(shí)現(xiàn)需求。 在我們的批次報(bào)表中,有個(gè)功能就是我們可以根據(jù)用戶選擇的變量生成曲線并插入報(bào)表中。在報(bào)表界面上有一個(gè)按鈕,點(diǎn)擊可以彈出曲線窗體。在這個(gè)曲線窗體中我們可以選擇需要的變量并生成曲線。 圖1 選擇并生成曲線 當(dāng)選擇變量后,點(diǎn)擊按鈕“添加”即生成曲線。預(yù)覽沒問題后再點(diǎn)擊按鈕“插入到報(bào)表”即可將生成的曲線插入到報(bào)表中。下圖展示了曲線插入到報(bào)表中的效果。 圖2 曲線插入報(bào)表 這種需求如何實(shí)現(xiàn)呢?我們可以在曲線窗口關(guān)閉時(shí)根據(jù)返回值判斷是否需要插入曲線。如果點(diǎn)擊了按鈕“插入到報(bào)表”就返回YES,代碼如下。 private void btninsert_Click(object sender, EventArgs e) { this.Close(); //曲線窗體返回YES this.DialogResult = DialogResult.Yes; } 如果沒有點(diǎn)擊按鈕“插入到報(bào)表”而是直接關(guān)閉曲線窗體,則返回NO,代碼如下: private void FrmChart_FormClosing(object sender, FormClosingEventArgs e) { this.Close(); //曲線窗體返回NO this.DialogResult = DialogResult.No; } 我們可以在上一層窗口中根據(jù)曲線窗口的返回值判斷是否插入圖片。 private void btnChart_Click(object sender, EventArgs e) { FrmChart frm = new FrmChart(); //如果返回值是YES,則插入曲線 if (frm.DialogResult==DialogResult.Yes) { ///插入曲線 /// } } 這種方法可以實(shí)現(xiàn)我們的需求。但是它有個(gè)缺點(diǎn)就是必須要在窗體關(guān)閉后才插入曲線。如果我們還要再添加或者刪除曲線,只能再次打開曲線窗口,選擇、添加變量生成曲線。在使用上稍微有點(diǎn)麻煩。那如何做到曲線窗體不關(guān)閉就可以在報(bào)表中同步插入曲線呢?這時(shí)委托就派上用場(chǎng)了。
我們?cè)谇€窗體中聲明一個(gè)委托類型_GetChart,并聲明一個(gè)類型為_GetChart的方法。然后在上一層窗口中創(chuàng)建一個(gè)名為GetChart的方法。 private void getChart() { try { ///插入曲線 } catch (Exception ex) { MessageBox.Show(ex.Message); } } 在調(diào)用曲線窗口時(shí)將該方法綁定到曲線窗口的GetChart方法上。 private void btnChart_Click(object sender, EventArgs e) { FrmChart frm = new FrmChart(); frm.GetChart += getChart; frm.ShowDialog(); } 最后在曲線窗體中點(diǎn)擊按鈕“插入到報(bào)表”事件中調(diào)用該委托方法即可。 private void btninsert_Click(object sender, EventArgs e) { //其它代碼 if (GetChart != null) { GetChart(); } } 運(yùn)行程序。當(dāng)我們?cè)谇€窗口中點(diǎn)擊按鈕“插入到報(bào)表”時(shí),上一層窗口中會(huì)同步展示新的曲線。如果需要更新曲線,也不用關(guān)閉窗口再重新打開,操作更加人性化。 圖3 上一層窗體和曲線窗體同步更新 該文章在 2023/9/4 9:46:25 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |