2012-02-10 14 views
0

私は角度値を表示するいくつかのテキストボックスを持っています。私はIFormatProviderの異なるカスタム実装を使用してこれらの書式を設定します。値1.5707963267949は、1.5707963267949,0.5πまたは90°と表示されます。テキストボックスには、一方向-データバインドされていると私はバインディングのFormatイベント処理によって書式設定を行います。私は、彼らがに表示されているのと同じ形式で入力値をユーザに許可する逆IFormatProviderのようなカスタム解析サービスプロバイダはありますか?

void bindingToMyTextBox_Format(object sender, ConvertEventArgs e) 
{ 
    // angleValueFormat is one of a few a custom implementations of 
    // IFormatProvider performing the actual formatting work. 
    e.Value = String.Format(this.angleValueFormat, "{0:0.###}", (double)e.Value); 
} 

をだから私は、元の値1.5707963267949を取得するには、TextBox.Textを解析する必要があります。逆の方向にIFormatProviderのような構文解析サービスを提供する"IParserProvider"インターフェイスはありますか?あるいは、別のアプローチを提案しますか?

私が理解から、解析する数値は、それが-objectた私は明らかにできないIFormatProvider.GetFormat()、によって返されただけNumberFormatInfoを使用して、ある形式で決定するために、ので、私はConvert.ToDouble Method (String, IFormatProvider)で私IFormatProvidersを使用することはできません必要な情報を指定するために使用します。

ありがとうございました!

richn

答えて

1

いいえ、それはできません。ほとんどの場合、一般的にフォーマッタ(iircは内部的にメソッドICustomFormatter.Formatによって実装されている)からパーサを自動的に推論することができないためだと思います。

私は

public interface IAngleParser { 
    double ParseAngle(string); 
} 

独自のインタフェースを定義し、angleValueFormat mamberのためにあなたのクラスでそれを実装することをお勧め。おそらく、それをするために正規表現などを使う必要があります。

次に、あなたは

void bindingToMyTextBox_Parse(object sender, ConvertEventArgs e) { 
    e.Value = ((IAngleParser)this.angleValueFormat).ParseAngle(e.Value); 
} 

を使用して、結合のにParseイベントを、これをバインドすることができます。

+0

ありがとう、マーティン、私はそれをします。 – richn

0

あなたは、コンテナ/辞書のいくつかの並べ替えであなたの元の値を格納することができます。テキストボックスに書式を設定すると、書式を設定した後、元の値が必要なときに辞書から再度引き出します。

e.Value = String.Format(this.angleValueFormat, "{0:0.###}", MyValues["ValueName"]; 
+0

必ずしも同じ値ではありません。私が定義した形式でユーザーの入力を処理したい。それを反映するために私の質問を更新しました。 – richn

関連する問題