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