Re: [問題] 請問一下兩個form之間訊息如何互傳?

看板C_Sharp (C#)作者 (測試)時間20年前 (2004/09/12 20:46), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《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
文章代碼(AID): #11H4K8ph (C_Sharp)
文章代碼(AID): #11H4K8ph (C_Sharp)