情況:C#,.NET 3.5,WinForms的C#Winforms:將一種功能從一種形式傳遞給另一種形式?
目的:Form1上具有可通過構造方法來啓用一個按鈕。 I.E.只有在我調用新的Form1(true)時纔會顯示該按鈕。 我們希望能夠通過Form2中的一些參數傳遞給Form1(不必在Form1的構造函數中),並且當按下Form1.Button1時,應該執行Form2.<SomeMethod>
。
我們知道,我們可以在Form1中創建一個代表/事件,並從窗體2做這樣的事情:
Form1.SomeDelegate += new ..... (MyMethodInForm2);
...然後在Form1_ButtonClick我們火,這反過來會做魔術在窗體2的事件。
但我們想知道是否有更優雅/新/現代的版本(匿名方法?Lambda表達式?等)來完成此操作。
這個想法是,「任何」窗體可以instanciate Form1類,並傳遞自己的方法來執行時單擊Form1的按鈕;但不是對調用方的回調(form2,3,.. n),Form1會執行傳遞的函數(可能駐留在調用方內)。現在我們確實不需要這些函數來獲取參數。
注意:代碼示例包含簡單的變量/對象名稱,並不從現實生活中取得,請忽略簡單性。
UPDATE對不起,不是更具體的,我想我會繼續使用該委託/事件模型,但作爲參考,這就是我認爲是situtation的一個更好的描述:
Form1的是一種通用的形式,接受項目列表並顯示它們。我們可能會傳遞員工類型或人員類型或任何「T」。它工作正常。 我們收到客戶的一個要求,詢問是否可以向該小Form1添加一個可選按鈕,如果點擊它,它將打開另一個表單/執行某種方法。
這樣,如果我使用Form1,我可以在運行時告訴按鈕打開EmployeeForm,而如果我使用Form1,則同樣的按鈕可以打開窗體PersonForm。現在打開表單並不是我們對該按鈕的唯一使用,但這是調用者的問題。
現在,我所做的就是我們所說的:在該Form1上的委託/事件和在「調用」窗體上我們做一個Form1.theEvent + =的東西,以訂閱該事件。我只是想知道是否有更好的方法來實現這一點,因爲這是我們如何在.NET 2.0中完成的,並且我們剛剛開始使用.NET 3.5。
我想,我也希望讓更多的「API」不僅僅是友好讓API用戶知道他必須訂閱XX事件... –