2009-04-24 6 views
3

IFormatProviderを使用していくつかのデータバインディングをカスタマイズしようとしています。 IFormatProviderクラスは決して呼び出されません。私は私のカスタムformatingクラスで両方の関数の初めにブレークポイントを置き、どちらもデータバインディングでヒットしていません。 String.Formatで私のカスタムformatingクラスを使用するとき、それは動作します。IFormatProviderを使用したDataBindings.Add

私は.Net 2.0とwinformsを使用しています。

これは私がデータバインディングを行う方法です。

label1.DataBindings.Add("Text", textBox1, "Text", true, 
          DataSourceUpdateMode.OnPropertyChanged, 
       "<NULL>","{0:H}",new MyFormat()); 

これは私がString.Formatの使用方法です:

string test =(string.Format(_superFormat, "{0}", "this is my arg")); 

を、これは私のカスタム整形クラスです:

class MyFormat : IFormatProvider, ICustomFormatter 
    { 
     string ICustomFormatter.Format(string format, object arg, IFormatProvider formatProvider) 
     { 
      string result = ((string)arg).ToUpper(); 
      return result ; 
     } 
     object IFormatProvider.GetFormat(Type formatType) 
     { 
      if (formatType == typeof(ICustomFormatter)) 
       return this; 
      else 
       return null; 
     } 
    } 

答えて

3

あなたは正確に何をしようとしていますか? Textプロパティを想定し

は、私の知る限りstringIFormattableを実装していないので、は、フォーマッタを使用することはできませんそれを知っているように、文字列です。 (DataBindings.Addを支える)

Bindingクラスは、書式設定を制御するために使用することができるFormatイベントとParseイベントを有しています。また、ターゲットのバインドされたプロパティでTypeConverterを使用することもできます。これは、UIからこのロジックを移動させるためです。

だからあなたは何をしたいのですか?

+1

彼の問題はかなり明確です。彼はDataBindigs.Addにカスタムフォーマッタを提供し、WinFormsはそれを完全に無視し、GetFormat()やFormat()を呼び出すことはありません。私は同じ問題を抱えており、実際に使用されていないときにフォーマッタを指定することがなぜ可能なのか疑問に思います。 –

関連する問題