Binding.Format Händelse

Definition

Inträffar när egenskapen för en kontroll är bunden till ett datavärde.

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 

Händelsetyp

Exempel

I följande kodexempel skapas ett Binding, lägger till ett ConvertEventHandler ombud för både Parse händelserna och Format och lägger Binding till till BindingsCollection i kontrollen TextBox via DataBindings egenskapen . Händelsedelegaten DecimalToCurrencyString , som läggs till i Format händelsen, formaterar det bundna värdet (en Decimal typ) som valuta med hjälp av ToString metoden. Händelsedelegaten CurrencyStringToDecimal , som läggs till i Parse händelsen, konverterar värdet som visas av kontrollen tillbaka till Decimal typen.

I det här exemplet förutsätts förekomsten av en DataSet namngiven ds.

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

Kommentarer

Händelsen Format utlöses när data skickas från datakällan till kontrollen. Du kan hantera Format händelsen för att konvertera oformaterade data från datakällan till formaterade data för visning. När data hämtas från kontrollen till datakällan Parse utlöses händelsen för att avformatera det visade värdet. Format Händelsen inträffar för att formatera om data för visning. Detta säkerställer att den bundna kontrollen visar korrekt formaterade data oavsett om användaren anger formaterade eller oformaterade data i kontrollen.

Med Format händelserna och Parse kan du skapa anpassade format för att visa data. Om data i en tabell till exempel är av typen Decimalkan du visa data i lokal valutaformat genom att ange Value egenskapen ConvertEventArgs för till det formaterade värdet i Format händelsen. Du måste därför avformatera det visade värdet i Parse händelsen.

Händelsen Format inträffar när Current värdet för BindingManagerBase ändringarna, som omfattar:

  • Första gången egenskapen är bunden.

  • Varje gång ändringarna Position ändras.

  • När den databundna listan sorteras eller filtreras, vilket uppnås när en DataView tillhandahåller listan.

Händelsen Format inträffar också efter händelsen Parse . När en kontroll till exempel förlorar fokus parsas dess innehåll. Omedelbart efteråt, när nya data skickas till kontrollen, Format sker händelsen så att det nya innehållet kan formateras.

Mer information om hur du hanterar händelser finns i Hantera och höja händelser.

Gäller för

Se även