DelphiのVCLには、非常に便利なクラスCustomControlがあります。このクラスは、Controlの直接の基本クラスであり、C#WFのUserControlと同等です。
VCLに精通していない人にとって、CustomControlはControlとほとんど変わりません。主な違いは、ほとんどのプロパティが保護されていることです。新しいコントロールを実装するとき、開発者は、公開するコントロールと非表示のままにするコントロールを決定できます。
Windowsフォーム用に独自のコントロールを開発していて、いくつかのプロパティとイベントを非表示にしたい。たとえば、MouseDownイベントを公開したくありません。代わりに、コントロールの要素をクリックしてキャプチャすることを許可します。
WindowsフォームにVCLのCustomControlに相当するものはありますか?そうでない場合、どうすれば不要なパブリックプロパティとイベントを自分のコントロールで非表示にできますか?
回答に応じて:
これはセキュリティの問題ではなく、コードの優雅さの問題です。Delphiでは、CustomControlから派生し、OnMouseDownイベントを保護したままにして(C#の保護のように)、コントロールのユーザーに次のように伝えます。
OnMouseDownがないため、使用できません。ユーザーがコントロールをクリックしたことに反応したい場合は、OnElementClickedを使用するだけです。クリックされた要素とその状態に関する詳細情報も取得できます。
Hans Passantが提案したように、MouseDownイベントの呼び出しを無効にすることもできますが、その場合は、コントロールのユーザーマニュアルに次の内容を含める必要があります。
OnMouseDownメソッドをオーバーライドして、MouseDownイベントが呼び出されないようにするため、MouseDownイベントは使用しないでください。これは、コントロールのロジックがそのように設計されているため、OnMouseDownではなくOnElementClickedを使用する必要があるためです。MouseDownが機能しないため、コントロールを批判しないでください。これは仕様によるものであるため、バグとして報告しないでください。コントロールのロジックが破損する可能性があるため、クラスを継承して手動でMouseDownイベントを呼び出すことにより、MouseDownの問題を修正する方法を説明するメッセージをフォーラムに投稿したりブログエントリを作成したりしないでください。罪状認否は...くそったれ、そう言った!
誰かが実際に私のコントロールを継承している場合-私は、彼が何をしているのかを知っていると思います(また、私のコントロールの内部ロジックにもアクセスできるためです)。しかし、誰かが私のコントロールを使用するだけの場合は、これらのプロパティ、イベント、およびメソッドのみを彼に提供します。これは、設計どおりに機能すると確信しています。
それが私の動機を説明することを願っています:)