2012-03-16 12 views
1

拡張メソッドを使用して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

+0

からあなたの拡張メソッドを呼び出すことができるはず

は、一般的には、デザイナーに独自のコードを置く悪い習慣だ - VSは、それを再生成することができ、あなたの変更を失うだろう。 Form_Loadなどから呼び出すことはできませんか? – kaj

+0

ありがとう、それは良い点です。 Form_Loadから完全に動作します。あなたが答えとして答えるなら、私はそれを正しいものとしてマークします。 – Dan

+0

答えに移動しました。ありがとう – kaj

答えて

1

は、一般的にそれはあなた自身を置くために悪い習慣です設計者のコード - VSがデザイナーのコードを再生成する可能性があり、変更を失うことになります。あなたが例えばのForm_Loadすなわち

this.dateTimePicker1.Value = DateTime.Today.NextDay(); 
0

フォーム1に名前空間ExtensionMethodDesignWindowTestを追加する必要がありますか? designer.csで

追加:

using ExtensionMethodDesignWindowTest; 

EDIT

は次のようにコードを変更して動作します:

this.dateTimePicker1.Value = ExtensionMethodDesignWindowTest.DateTimeExtensions.NextDay(DateTime.Today); 
+0

私は1つの名前空間、すなわちExtensionMethodDesignWindowTestしか持っていません。 Form1.csとdesigner.csなどはすでにその名前空間に入っています。とにかく上の行を追加しようとしましたが、私は恐れているものを変更しませんでした。 – Dan

+0

私の編集を参照してください、私のために働く。 –

+0

助けてくれてありがとうArnaud、実際にはエラーを取り除いていますが、拡張メソッドを使用する点を打ち負かしています。 KAJの提案は私にとってもっと意味がある。 – Dan

関連する問題