この MSDN サンプルDataGridViewCalendarCellに基づいて を作成しています。に 2 つのプロパティを追加したため、基本クラスの Clone をオーバーライドしたいと考えています。問題は、これについてどうすればよいかわからないことです。DataGridViewTextBoxCellDataGridViewCalendarCell
Clone をオーバーライドする必要があると思う理由:
にDateTimePickerは 2 つのプロパティがあります。CustomFormatとを初期化するときに設定できるクラスFormatのプロパティを介して公開します。これらのプロパティは、列がテンプレートとして使用するプロパティを次のように設定します。CalendarColumnCalendarColumnDataGridViewCalendarCell
public string CustomFormat {
get {
return ((DataGridViewCalendarCell)base.CellTemplate).CustomFormat;
}
set {
((DataGridViewCalendarCell)base.CellTemplate).CustomFormat = value;
}
}
public DateTimePickerFormat Format {
get {
return ((DataGridViewCalendarCell)base.CellTemplate).Format;
}
set {
((DataGridViewCalendarCell)base.CellTemplate).Format = value;
}
}
関数では、セル値の編集に使用されるDataGridViewCalendarCell.InitializeEditingControlにプロパティが再び渡されます。DateTimePicker
私が抱えている問題は、 whenDataGridViewCalendarCell.InitializeEditingControlが呼び出され、もう設定されていないことですFormat。CustomFormat
これは、実際DataGridViewCalendarCellの s がテンプレートのクローンであるためだと推測しています。CloneのメソッドをオーバーライドしなかったためDateGridViewTextBoxCell、余分なプロパティも複製されません。
また、MSDN の記事に素晴らしいメモがあります。
DataGridViewCell または DataGridViewColumn から派生させ、新しいプロパティを派生クラスに追加する場合は、複製操作中に Clone メソッドをオーバーライドして新しいプロパティをコピーしてください。基本クラスのプロパティが新しいセルまたは列にコピーされるように、基本クラスの Clone メソッドも呼び出す必要があります。
Clone をオーバーライドする方法がわからない理由:
これは、WinForms コントロールに対してこれを行う標準的な方法があるように感じさせますが、それについては何も見つかりません。
DataGridViewTextBoxCellから返されたクローンを渡すことができるコピー コンストラクターはありませんbase.Clone()。どのプロパティをコピーする必要があり、どのプロパティをコピーしてはならないかを判断する方法がわからないため、Reflection を使用しないことを好みます。連載でなんとかならないかなと思っていますが、今は見切れない副作用が怖いです。
カスタム コントロールで Clone をオーバーライドする標準的な方法はありますか?
編集: クローンはすべてのカスタム コントロールに関連するわけではなく、DataGridViewCellsのみに関連するため、質問のタイトルを編集しました