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делегат, добавляется ConvertEventHandler делегат как к событиям, так Parse и FormatBinding к BindingsCollectionTextBox элементу управления через DataBindings свойство. Делегат DecimalToCurrencyString события, добавленный в Format событие, форматирует привязанное значение ( Decimal тип) в виде валюты с помощью ToString метода. Делегат CurrencyStringToDecimal события, добавленный в Parse событие, преобразует значение, отображаемое элементом управления обратно в Decimal тип.
В этом примере предполагается наличие именованного DataSetds.
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 событие происходит для переформатации данных для отображения. Это гарантирует правильность форматирования данных, независимо от того, вводит ли пользователь отформатированные или неформатированные данные в элементе управления.
Parse События Format позволяют создавать настраиваемые форматы для отображения данных. Например, если данные в таблице имеют тип Decimal, данные можно отобразить в формате локальной валюты, задав Value свойство ConvertEventArgs отформатированного значения в событии Format . Следовательно, необходимо отменить формат отображаемого значения в событии Parse .
Событие Format происходит всякий раз, когда Current значение BindingManagerBase изменений, которое включает в себя:
При первом привязке свойства.
В любое время Position изменения.
Всякий раз, когда список с привязкой к данным отсортирован или фильтруется, который выполняется при DataView поставке списка.
Событие Format также возникает после Parse события. Например, когда элемент управления теряет фокус, его содержимое анализируется. Сразу же после отправки новых данных в элемент управления происходит событие, Format позволяющее отформатировать новое содержимое.
Дополнительные сведения об обработке событий см. в разделе "Обработка и создание событий".