これを実現するには、主に2つのオプションがあります。コントロールのユーザーに、[アップロード]ボタンがクリックされたときにコントロールによって呼び出されるアップロードメソッドを提供するように要求するか、コントロールをサブクラス化するように要求するか、Upload
メソッド実装されました。
方法1-アップロード時に呼び出されるデリゲートを提供する:
public partial class MyControl
{
// Define a delegate that specifies the parameters that will be passed to the user-provided Upload method
public delegate void DoUploadDelegate(... parameters ...);
private readonly DoUploadDelegate _uploadDelegate;
public MyControl(DoUploadDelegate uploadDelegate)
{
if (uploadDelegate == null)
{
throw new ArgumentException("Upload delegate must not be null", "uploadDelegate");
}
_uploadDelegate = uploadDelegate;
InitializeComponent();
}
// ...
// Upload button Click event handler
public void UploadButtonClicked(object sender, EventArgs e)
{
// Call the user-provided upload handler delegate with the appropriate arguments
_uploadDelegate(...);
}
}
方法2-アップロード方法をオーバーライドする必要があります。
public abstract partial class MyControl
{
private readonly DoUploadDelegate _uploadDelegate;
protected MyControl()
{
InitializeComponent();
}
// ...
// The method that users of the control will need to implement
protected abstract void DoUpload(... parameters ...);
// Upload button Click event handler
public void UploadButtonClicked(object sender, EventArgs e)
{
// Call the overridden upload handler with the appropriate arguments
DoUpload(...);
}
}
後者のオプションの場合、ユーザーは、次のように、コントロールを使用する前に、コントロールをサブクラス化する必要があります。
public class MyConcreteControl : MyControl
{
protected override void DoUpload(... parameters ...)
{
// User implements their own upload logic here...
}
}