拡張メソッドを使用してdatetimepickerコントロールを今日から前の勤務日に初期化しようとしています。しかし、これは私のフォームデザインウィンドウには、拡張メソッドを見つけることができないため、エラーを表示させる原因になります。C#拡張メソッドをコントロールのデフォルト値として使用すると、デザインウィンドウにエラーが発生する
新しいウィンドウフォームを作成してdatetimepickerを追加することで、このエラーを素早く再現できます。 datetimepicker1セクションの下にライン
this.dateTimePicker1.Value = DateTime.Today.NextDay();
を追加Form1.designer.csで
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ExtensionMethodDesignWindowTest
{
public static class DateTimeExtensions
{
public static DateTime NextDay(this DateTime date)
{
return date.AddDays(1);
}
}
}
そして最後に:次にNextDay()メソッドを追加したDateTimeを拡張するために、次の新しいクラスを作成します。 (編集:およびまたusing.system;最上部)
フォームデザインウィンドウに戻ると、エラーが表示されます。このコードは正常に構築され、正しく実行されます。datetimepickerは、フォームがロードされる明日の日付を示します。また、Form1.designer.csの追加行を
this.dateTimePicker1.Value = DateTime.Today.AddDays(1);
に置き換えた場合、デザインウィンドウでエラーが表示されません。これは、私は、Windowsフォームのデザインウィンドウは、ExtensionMethodDesignWindowTest名前空間を見ることができないため、エラーが原因であると仮定します。
フォームデザインウィンドウに自分の拡張方法が表示されるようにするにはどうすればよいですか?
おかげところで ダン
私はそれがここで問題と疑うのに私が使用している何のためにいくつかのIDEのバージョン情報です: のMicrosoft Visual Studio 2010の バージョン10.0.30319.1 RTMRel は、Microsoft .NET Framework バージョン4.0を。 30319 RTMRel
からあなたの拡張メソッドを呼び出すことができるはず
は、一般的には、デザイナーに独自のコードを置く悪い習慣だ - VSは、それを再生成することができ、あなたの変更を失うだろう。 Form_Loadなどから呼び出すことはできませんか? – kaj
ありがとう、それは良い点です。 Form_Loadから完全に動作します。あなたが答えとして答えるなら、私はそれを正しいものとしてマークします。 – Dan
答えに移動しました。ありがとう – kaj