Binding.Format イベント
コントロールのプロパティをデータ値にバインドすると発生します。
Public Event Format As ConvertEventHandler
[C#]
public event ConvertEventHandler Format;
[C++]
public: __event ConvertEventHandler* Format;
[JScript] JScript では、このクラスで定義されているイベントを処理できます。ただし、独自に定義することはできません。
イベント データ
イベント ハンドラが、このイベントに関連するデータを含む、ConvertEventArgs 型の引数を受け取りました。次の ConvertEventArgs プロパティには、このイベントの固有の情報が記載されます。
プロパティ | 説明 |
---|---|
DesiredType | 必要な値のデータ型を取得します。 |
Value | ConvertEventArgs オブジェクトの値を取得または設定します。 |
解説
Format イベントは、データがデータ ソースからコントロールにプッシュされるときに発生します。 Format イベントを処理することにより、データ ソース上の書式化されていないデータを、表示用の書式化されたデータに変換できます。データがコントロールからデータ ソースにプルされるときには、 Parse イベントが発生し、表示された値の書式が解除されます。その後、データを表示用に再度書式化するために Format イベントが発生します。これにより、ユーザーがコントロールに入力したデータが書式化されているかどうかにかかわらず、バインド先のコントロールには正しく書式化されたデータが表示されます。
Format イベントと Parse イベントによって、データ表示用のカスタム書式を作成できます。たとえば、テーブル内のデータの型が Decimal の場合は、 ConvertEventArgs オブジェクトの Value プロパティに、 Format イベントで書式設定された値を設定することにより、ローカルの通貨書式でデータを表示できます。その後、 Parse イベントで、表示した値の書式を解除する必要があります。
BindingManagerBase の Current 値が変更されると、必ず Format イベントが発生します。この値は、たとえば次のような場合に変更されます。
- 最初にプロパティがバインドされたとき。
- Position が変更されたとき。
- データ連結リストの並べ替えまたはフィルタ処理が行われたとき。この処理は、 DataView がリストを提供したときに完了します。
Format イベントは、 Parse イベントの後にも発生します。たとえば、コントロールがフォーカスを失うと、その内容が解析されます。解析の直後に、コントロールに新しいデータがプッシュされると、新しい内容の書式を設定するために Format イベントが発生します。
イベント処理の詳細については、「 イベントの利用 」を参照してください。
使用例
Binding を作成し、 ConvertEventHandler デリゲートを Parse イベントと Format イベントの両方に追加し、作成した Binding を DataBindings プロパティを使用して TextBox コントロールの BindingsCollection に追加する例を次に示します。 DecimalToCurrencyString イベント デリゲートは Format イベントに追加され、 ToString メソッドを使用して、バインドされた値 (Decimal 型) を通貨として書式設定します。 CurrencyStringToDecimal イベント デリゲートは Parse イベントに追加され、コントロールによって表示される値を Decimal 型に変換します。
Private Sub DecimalToCurrencyString(sender As Object, cevent As _
ConvertEventArgs)
' The method converts only to string type. Test this using the DesiredType.
If Not cevent.DesiredType Is GetType(String) Then
Exit Sub
End If
' Use the ToString method to format the value as currency ("c").
cevent.Value = CType(cevent.Value, Decimal).ToString("c")
End Sub
Private Sub CurrencyStringToDecimal(sender As Object, cevent As _
ConvertEventArgs)
' The method converts back to decimal type only.
If Not cevent.DesiredType Is GetType(Decimal) Then
Exit Sub
End If
' Converts the string back to decimal using the static ToDecimal method.
cevent.Value = Decimal.Parse(cevent.Value.ToString, _
NumberStyles.Currency, nothing)
End Sub
Private Sub BindControl
' Creates the binding first. The OrderAmount is a Decimal type.
Dim b As Binding = New Binding _
("Text", ds, "customers.custToOrders.OrderAmount")
' Add the delegates to the event
AddHandler b.Format, AddressOf DecimalToCurrencyString
AddHandler b.Parse, AddressOf CurrencyStringToDecimal
text1.DataBindings.Add(b)
End Sub
[C#]
private void DecimalToCurrencyString(object sender, ConvertEventArgs cevent)
{
// The method converts only to string type. Test this using the DesiredType.
if(cevent.DesiredType != typeof(string)) return;
// Use the ToString method to format the value as currency ("c").
cevent.Value = ((decimal) cevent.Value).ToString("c");
}
private void CurrencyStringToDecimal(object sender, ConvertEventArgs cevent)
{
// The method converts back to decimal type only.
if(cevent.DesiredType != typeof(decimal)) return;
// Converts the string back to decimal using the static Parse method.
cevent.Value = Decimal.Parse(cevent.Value.ToString(),
NumberStyles.Currency, null);
}
private void BindControl()
{
// Creates the binding first. The OrderAmount is a Decimal type.
Binding b = new Binding
("Text", ds, "customers.custToOrders.OrderAmount");
// Add the delegates to the event.
b.Format += new ConvertEventHandler(DecimalToCurrencyString);
b.Parse += new ConvertEventHandler(CurrencyStringToDecimal);
text1.DataBindings.Add(b);
}
[C++]
private:
void DecimalToCurrencyString(Object* /*sender*/, ConvertEventArgs* cevent)
{
// The method converts only to string type. Test this using the DesiredType.
if(cevent->DesiredType != __typeof(String)) return;
// Use the ToString method to format the value as currency ("c").
cevent->Value = (*__try_cast<Decimal*>(cevent->Value)).ToString(S"c");
}
void CurrencyStringToDecimal(Object* /*sender*/, ConvertEventArgs* cevent)
{
// The method converts back to decimal type only.
if(cevent->DesiredType != __typeof(Decimal)) return;
// Converts the string back to decimal using the static Parse method.
cevent->Value = __box(Decimal::Parse(cevent->Value->ToString(),
NumberStyles::Currency, 0));
}
void BindControl()
{
// Creates the binding first. The OrderAmount is a Decimal type.
Binding* b = new Binding
(S"Text", ds, S"customers.custToOrders.OrderAmount");
// Add the delegates to the event.
b->Format += new ConvertEventHandler(this, &Form1::DecimalToCurrencyString);
b->Parse += new ConvertEventHandler(this, &Form1::CurrencyStringToDecimal);
text1->DataBindings->Add(b);
}
[JScript]
private function DecimalToCurrencyString(sender, cevent : ConvertEventArgs)
{
// The method converts only to string type. Test this using the DesiredType.
if(cevent.DesiredType != String.GetType()) return;
cevent.Value = (Decimal(cevent.Value)).ToString("c");
}
private function CurrencyStringToDecimal(sender, cevent : ConvertEventArgs)
{
// The method converts only to decimal type.
if(cevent.DesiredType != Decimal.GetType()) return;
// Converts the string back to decimal using the static Parse method.
cevent.Value = Decimal.Parse(cevent.Value.ToString(),
NumberStyles.Currency, null);
}
private function BindControl()
{
// Creates the binding first. The OrderAmount is a Decimal type.
var b : Binding = new Binding
("Text", ds, "Suppliers.CompanyName");
// Add the delegates to the event.
b.add_Format(DecimalToCurrencyString);
b.add_Parse(CurrencyStringToDecimal);
text1.DataBindings.Add(b);
}
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
参照
Binding クラス | Binding メンバ | System.Windows.Forms 名前空間 | Parse | OnFormat