Re: [問題] 請問一下兩個form之間訊息如何互傳?
※ 引述《Ovaltine1015 (尋找我的Tone!!)》之銘言:
: 不好意思,我又來發問了,由於剛接觸windows forms,
: 所以蠻多介面只會拉而不知其所以然,
: 所以小弟又來請教各位前輩一些問題了,
: 現在我有一個主要的form ==> Painter(主要是做繪圖的)
: 然後我又弄了另一個form ==> TextLayer
: (這主要是想讓使用管理輸入的文字,有點像photoshop裡面的Layer)
: ------------------------- 想達到的功能 ----------------------------
: 當使用者在Painter按下toolbar其中一個按鈕時,
: 我就使用TextLayer.Show()叫出視窗,
: 然後在TextLayer中,當使用者按下一個刪除鈕時,
: 我必須更新宣告於Painter中儲存文字的ArrayList(稱textArray),
: 使其textArray少一個字串,並同時呼叫Painter的Invalidate(),
: 讓整個Painter能繪製最新的畫面......
: --------------------------------------------------------------------
: 我之前為了能更新那ArrayList,將其宣告為static,
: 然後直接在TextLayer中某個ButtonClick函式中直接存取Painter.textArray,
: 但是我卻不知如何通知Painter重會顯示區域....
: 所以想請問各位前輩,在兩個form之間互傳訊息時,有沒有什麼其他的方式?
不一定要用static,這樣每次使用前你都要將該ArrayList作預設值處理有點不方便。
你可以在TextLayer的類別程式碼中宣告一個form類別成員。每次從Painter叫出
TextLayer的時候,將TextLayer物件實體中的該form類別成員指向為現在正在
使用的Painter(也是form類別成員),如此一來在TextLayer也可以存取Painter類別物
件實體的成員或方法了。
e.g., (in Painter)
dim MyTextLayer as new TextLayer()
MyTextLayer.form_Painter = me
MyTextLayer.Show()
: 另外,我該如何在ButtonClick函式中通知Painter該重新繪製顯示區域呢?
如上所述,藉由TextLayer物件實體的成員來存取Painter物件實體的成員或方法
換言之就是在Painter類別中撰寫一個繪製顯示區域的方法
: 以下是TextLayer中的函式....
: private void btn_DelText_Click(object sender, System.EventArgs e)
: {
: this.Close();
: if(TextList.SelectedIndex>=0)
: PainterPro.DeleteText(TextList.SelectedIndex);
: }
: 想請問一下那個sender,指得是那個物件?
: 是TextLayer嗎? 有辦法從這裡access到Painter這個物件嗎?
我記得好像是Button
: 感謝大家耐心看完,還煩請各位前輩指導了~~~~
: 最後還想請問一下各位,這部分是否有哪些不錯的參考書籍或是網站呢?
: 我覺得我現在只會拉來拉去,卻不知道整個脈絡、概念,感覺有點不踏實,
: 還請各位前輩多多推薦優良讀物......謝謝大家...... ^^
一般市面上都會大略地解說原理,可以先參考看看
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.68.79.170
推
140.113.185.47 09/13, , 1F
140.113.185.47 09/13, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章