我很難得到Delphi 2006將事件處理程序分配給獨立的TFrame上的組件。如何強制TFrame上的組件擁有自己的事件處理程序?
說我有一個框架TComboFrame
,其中包含TCombo Combo1
,我在我的主窗體上的幾個地方使用它。
當我把TComboFrame MyFrame1
的實例拖到我的主要形式,我想一個 事件處理程序分配到組合,我通過點擊TCombo內 ,我已經在窗體上放置框MyFrame1
做,然後雙擊對象檢查器「事件」選項卡中空的 OnChange
字段。
通常情況下,創建一個新的處理程序與類似的名稱:
procedure TMainForm.MyFrame1Combo1Change(Sender: TObject);
和事件處理程序名稱是從祖先TComboFrame(Combo1
)成分的名稱和實例的名稱派生我已放置在我的表單(MyFrame1
)上 - 即對於TComboFrame的實例唯一。然後我可以 爲我已經放在我的主要 表單上的框架的其他實例執行此操作,並且它們各自獲取它們自己的事件處理程序。
如果我想要爲該框架的所有實例啓動的事件處理程序,我會打開祖先框架並在那裏執行。
這是我對它應該如何工作的理解,但有些地方 出了問題。我的主要 形式框架的幾個實例,有的有自己的事件處理程序,以及一些有共同的事件處理程序,
procedure TDMainForm.ComboFrame1Combo1Change(Sender: TObject);
沒有什麼我試圖打破這種幻像鏈接德爾福似乎與 這是由幾個框架共享的常見事件處理程序。
我該如何修復這個狀態,以及首先導致它的原因是什麼?
**更新1 **
我讀的答覆,有點實驗,我可以通過以下步驟修復有問題的組件後發現:
1)刪除所有的事件處理程序幀。
2)刪除框架,記住它的名稱。
3)複製另一個已知是確定的(即具有自己的「個人」事件名稱)。
4)粘貼一個代替你刪除的那個。
5)恢復原來的名字。
6)創建你的事件處理程序。
...至少,它對我至少工作一次...
**更新2 **
另一種方法來治癒它似乎是改寫事件處理程序的名稱,它創建當您在Object Inspector中的空事件字段中雙擊,用新的唯一名稱,然後再次雙擊該名稱。 Delphi然後創建一個具有唯一名稱的空處理程序。
我不喜歡發佈的事件或者,如果你需要將其刪除,你將得到的只是在運行時錯誤。所以如果可能的話,我想避免宣佈發佈的事件。如果它是您要共享的最終用戶組件,並希望他們在對象檢查器中設置事件,那就好了。 – 2012-04-06 01:26:25
謝謝@Remy。仍然沒有骰子。我仍然獲得了處理基於祖先的名字命名,而不是單獨的組件,而隨後發生的該幀的所有其他事件,以及被「破壞」框架的所有其他實例。事件處理程序名稱在我的源代碼中並不存在。有關更多信息,請參閱OP的附錄。 – rossmcm 2012-04-06 03:08:02