2017-02-27 4 views
0

イベントハンドラを割り当てるときに、私は、Object Inspectorが明示的なアクセス修飾子を持たないメソッド間でのみ選択できることに気付きました。private/protected/publicメソッドをイベントハンドラとして設定するのは安全ですか?

例として、以下のクラス撮る:]ドロップダウンリストで

TMyForm = class(TForm) 
    MyButton: TButton; 
    procedure MyButtonClick(Sender: TObject); 
    private 
    procedure MyButtonPrivateClick(Sender: TObject); 
    protected 
    procedure MyButtonProtectedClick(Sender: TObject); 
    public 
    procedure MyButtonPublicClick(Sender: TObject); 
    end; 

を、Object InspectorだけMyButtonClickを示しています

enter image description here

このような理由のために、それが安全だ場合、私は思ったんだけどコードによってイベントハンドラに対してprivate/protected/publicメソッドを設定するか、この慣行から生じるいくつかの問題があるかどうかを確認してください。

MyButton.OnClick := MyButtonPrivateClick; 
//... 
+0

試してみてどうなりますか? – Lloyd

+0

@Lloyd:それは何も間違っていないように見えますが、エラーもなくコンパイルも警告も動作しませんが、特定の条件で問題を引き起こすバックサイドアスペクトがあるかどうかはわかりません – ExDev

+2

メソッドが公開されています。このため、オブジェクトインスペクタで表示され、他のオブジェクトでは表示されません。 – kobik

答えて

3

これは隠された問題を心配することなく完全に安全です。これは、たとえば、フォーム内にサブコンポーネントがあるカスタムコンポーネントを記述するときによく使用されます(フォームとは対照的に)。あなたが望む場所に事実上どこでも置くことができますが、私はそれをprivateの下に保つことを提案します。

関連する問題