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