創作內容

8 GP

【C#】跨視窗傳遞集合

作者:羽翼│2017-03-07 20:36:20│巴幣:16│人氣:1078
在「視窗A」點按鈕(Button) → 彈出「視窗B」→ 將「視窗B」更改後的數值回傳
(醜不拉機的流程是意圖)

由於「視窗B」的設定不是只有一項,要回傳的話一定是陣列(Array)或集合(Collections)
好處是彼此的變數並不直接干涉,不用因為改了變數名,另一個也要跟著改。

※我用的是WPF,會跟WinForm有一點差距,但是方法差不多。偏基礎的部分就省略了,畢竟需要跨視窗還很在意修飾詞(public, private...)的人,看廢話也覺得煩吧。

視窗A - MainWindow
        private Dictionary<string, string> SetDic = new Dictionary<string, string>();
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            SettingWindow sw = new SettingWindow(SetDic);
            if (sw.ShowDialog() == true) //從設定中取值
                SetDic=sw.ApplySetting();
         }
視窗A的程式碼主要是
  • 第一列:建立Dictionary的集合「SetDic」,作為接收與後續利用
  • 第四列:在事件中用實做視窗B「SettingWindow」,視窗B的建構式看下面
  • 第五、六列:如果在視窗B有點「確定」之類的,那就會執行「SettingWindow」中寫好的方法,將回傳的集合賦值給「SetDic

視窗B - SettingWindow
    public partial class SettingWindow
    {
        private Dictionary<string, string> _SetDic;
        public SettingWindow(Dictionary<string, string> _SetDic)
        {
            //(不重要,中略)
            _SetDic=SetDic;
        }
        private void Apply_Click(object sender, RoutedEventArgs e)
        {
            //(不重要,中略)
            this.DialogResult = true;
            this.Close();
        }
        internal Dictionary<string, string> ApplySetting() {
            //(不重要,中略)
            return _SetDic;
        }
    }
視窗B就是重頭戲了,分成
  • 第一列:可以看到這個視窗的類別名稱是「SettingWIndow
  • 第三列:建立一個用來暫存從視窗A丟過來的集合「_SetDic
  • 第四~八列:由於要接視窗A丟過來的「SetDic」,所以在寫建構式時,要定義參數型別。然後在將接到「SetDic」賦予給「_SetDic
  • 第九~十四列:這個是點「確定」時,會觸發的事件。重點在第十三列與第十四列的「this.DialogResult = true; this.Close();」,功能分別是「要讓視窗A第五列的IF判斷能成功觸發、關閉視窗B
  • 第十五~十八列:寫一個會回傳數值的方法,把在視窗B變更過的「_SetDic」回頭賦予給「SetDic


其他方法網路上很多,隨意google都可以
這不過是我覺得用起來最安心方法,算是開發過程兼心得分享
有問題或想知道更詳細的話,在留言裡說吧
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=3504040
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:C#|WPF

留言共 3 篇留言

寶爺
魔法師好厲害

03-07 21:15

羽翼
寫程式碼還挺像在唱咒文
越高階的魔法師不只詠唱速度更快,還能用更短的字詞達到相同效果
而多系統或多屬性修練的話,可以做到自由切換甚至干涉他人術事呢(找到可侵入的地方,一口氣插進去破壞或反過來利用都行)

阿寶要來轉職魔法少年嗎, 阿哈哈哈? (ㄎ一ㄤ掉的模式)03-07 21:21
寶爺
我邏輯跟英文不好 ...! 我文科系ㄉ

03-07 21:30

羽翼
其實寫程式跟英文好不好沒關係就是了,反正不是說人話

那就坐等阿寶的小屋更新 --還有每日速寫累積30天成就 (?)--03-07 21:43
貓貓風 ฅ●ω●ฅ
[e30]

03-07 22:47

羽翼
[e35]03-07 22:59
我要留言提醒:您尚未登入,請先登入再留言

8喜歡★rola1989 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:【RPG公會】【濃情幻想... 後一篇:【RPG公會】【黑科技】...

追蹤私訊切換新版閱覽

作品資料夾

kktwtwyufoo巴友們
近期沒有靈感可以繼續寫作下去,希望大家可以助我一臂力,好讓我完成我的新作出來,謝謝。看更多我要大聲說昨天21:45


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】