Binding.Format 事件

定義

發生於控制項屬性繫結至資料值時。

public:
 event System::Windows::Forms::ConvertEventHandler ^ Format;
public event System.Windows.Forms.ConvertEventHandler Format;
public event System.Windows.Forms.ConvertEventHandler? Format;
member this.Format : System.Windows.Forms.ConvertEventHandler 
Public Custom Event Format As ConvertEventHandler 

事件類型

範例

下列程式碼範例會 Binding 建立 、將委派 Parse 加入 ConvertEventHandler 至 和 Format 事件,並透過 屬性將 加入 BindingsCollectionBinding 至 控制項的 TextBoxDataBindings 。 新增 DecimalToCurrencyStringFormat 事件的事件委派會使用 ToString 方法,將系結值格式化 Decimal (類型) 為貨幣。 加入 CurrencyStringToDecimalParse 事件的事件委派會將控制項所顯示的值轉換回 Decimal 類型。

此範例假設有名為 dsDataSet

private:
   void DecimalToCurrencyString( Object^ /*sender*/, ConvertEventArgs^ cevent )
   {
      // The method converts only to string type. Test this using the DesiredType.
      if ( cevent->DesiredType != String::typeid )
      {
         return;
      }
      
      // Use the ToString method to format the value as currency ("c").
      cevent->Value = ( (Decimal)(cevent->Value) ).ToString( "c" );
   }

   void CurrencyStringToDecimal( Object^ /*sender*/, ConvertEventArgs^ cevent )
   {
      // The method converts back to decimal type only. 
      if ( cevent->DesiredType != Decimal::typeid )
      {
         return;
      }
      
      // Converts the string back to decimal using the static Parse method.
      cevent->Value = Decimal::Parse( cevent->Value->ToString(),
         NumberStyles::Currency, nullptr );
   }

   void BindControl()
   {
      // Creates the binding first. The OrderAmount is a Decimal type.
      Binding^ b = gcnew Binding(
         "Text",ds,"customers.custToOrders.OrderAmount" );
      
      // Add the delegates to the event.
      b->Format += gcnew ConvertEventHandler( this, &Form1::DecimalToCurrencyString );
      b->Parse += gcnew ConvertEventHandler( this, &Form1::CurrencyStringToDecimal );
      text1->DataBindings->Add( b );
   }
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);
}
Private Sub DecimalToCurrencyString(sender As Object, cevent As _
ConvertEventArgs)
   ' The method converts only to string type. Test this using the DesiredType.
   If cevent.DesiredType IsNot 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 cevent.DesiredType IsNot 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

備註

Format當資料從資料來源推送至 控制項時,就會引發 事件。 您可以處理 事件, Format 將未格式化的資料從資料來源轉換成格式化的資料以供顯示。 當資料從 控制項提取到資料來源時, Parse 事件會引發為未格式化顯示的值,然後 Format 就會發生事件來重新格式化要顯示的資料。 這可確保系結控制項會顯示正確格式化的資料,不論使用者是在控制項中輸入格式化或未格式化的資料。

FormatParse 事件可讓您建立自訂格式來顯示資料。 例如,如果資料表中的資料屬於 類型 Decimal ,您可以將 的 屬性 ConvertEventArgs 設定 Value 為 事件中的 Format 格式化值,以本機貨幣格式顯示資料。 因此,您必須取消格式化事件中顯示的 Parse 值。

Format每當 Current 變更的值 BindingManagerBase 時,就會發生此事件,包括:

  • 第一次系結屬性時。

  • 每當變更時 Position

  • 每當資料系結清單經過排序或篩選時,就會在提供清單時 DataView 完成。

事件 Format 也會在 事件之後 Parse 發生。 例如,當控制項失去焦點時,會剖析其內容。 緊接著,當新的資料推送至控制項時, Format 就會發生事件,讓新內容格式化。

如需處理事件的詳細資訊,請參閱 處理和引發事件

適用於

另請參閱