次の方法で共有


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 イベントで、表示した値の書式を解除する必要があります。

BindingManagerBaseCurrent 値が変更されると、必ず Format イベントが発生します。この値は、たとえば次のような場合に変更されます。

  • 最初にプロパティがバインドされたとき。
  • Position が変更されたとき。
  • データ連結リストの並べ替えまたはフィルタ処理が行われたとき。この処理は、 DataView がリストを提供したときに完了します。

Format イベントは、 Parse イベントの後にも発生します。たとえば、コントロールがフォーカスを失うと、その内容が解析されます。解析の直後に、コントロールに新しいデータがプッシュされると、新しい内容の書式を設定するために Format イベントが発生します。

イベント処理の詳細については、「 イベントの利用 」を参照してください。

使用例

Binding を作成し、 ConvertEventHandler デリゲートを Parse イベントと Format イベントの両方に追加し、作成した BindingDataBindings プロパティを使用して 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