2012-01-05 79 views
0

我正在爲基於用戶的應用程序動態創建按鈕。現在,我必須通過參數向窗體告知新窗體應用於按鈕的文本,窗體然後創建按鈕。現在我遇到了一個問題 - 這些按鈕的事件:通過按鈕點擊事件的最佳機制是什麼?我無法從原始表單訪問表單,我只能傳遞簡單的數據類型(和數組)。C#動態按鈕事件處理程序機制

我的第一個想法是使用代碼來反駁靜態類中的適當方法 - 基本上,傳遞一個int數組來通過按鈕的名稱和它們的onclick處理函數調用一個方法 - handle(int code) - >在一個巨大的switch語句中使用代碼來調用適當的方法。

但我懷疑這是最好的機制。我寧願創建一種只監聽按鈕點擊的監聽器,並且如果點擊未被處理,請確定哪個按鈕被點擊並從那裏管理它。

我已經看過觀察者模式,我不完全相信這是最好的遵循。問題不是沒有解決方案,問題是我想要最好的解決方案。

這是在單片機的C#中 - 但這種信息的影響應該是最小的。

感謝

+0

你爲什麼不能從原始形式訪問形式? – Meysam 2012-01-06 08:53:33

+0

由於創建Android窗體的方式起作用 - 它不是您簡單創建的某個對象 - 它是必須啓動的活動實例。沒有「活動對象」來訪問。 – 2012-01-06 12:47:59

回答

0

目前我有兩個選擇:

  1. 使用反射 - 通過一個方法名按鈕,然後該按鈕可以調用基於傳遞的字符串值的方法。然後簡單地創建一個靜態類,其中保存所有的按鈕方法。

  2. 使用switch語句 - 因爲我可以讓參數具有委託(其中一個是SENDER對象)我可以輕鬆地將sender對象發送給包含switch語句的方法,該語句根據該對象執行操作。

在我的研究中,我確定前者(反射)是首選,特別是因爲按鈕的數量相當大。

REFS:
http://embeddedgurus.com/stack-overflow/2010/04/efficient-c-tip-12-be-wary-of-switch-statements/
Large Switch statements: Bad OOP?
Method Factory - case vs. reflection

0

不知道要充分了解什麼是真正是你的問題,但這裏是你應該如何處理動態控制和事件處理程序:

Button myNewButton = new Button { Text = "MyCaption" }; 
myNewButton.Click += (sender, e) => 
    { 
     ((Button)sender).Text = "New text here!"; 
     // Another logic could be put here 
    }; 
+0

我可以做到這一點,但我正在做的是動態表單生成。我正在使用一個活動來誇大同一個按鈕的幾個版本(由於樣式限制),現在問題是我有3或4個活動是從相同的代碼加載的(可重用性)。所以代碼是一個類,但是被製作成許多活動 - 每個活動都有不同的按鈕(都是動態膨脹的)。那麼現在如何爲這些按鈕創建一個管理系統? – 2012-01-05 12:46:10

相關問題