다음을 통해 공유


Binding.Format 이벤트

컨트롤의 속성이 데이터 값에 바인딩되면 발생합니다.

네임스페이스: System.Windows.Forms
어셈블리: System.Windows.Forms(system.windows.forms.dll)

구문

‘선언
Public Event Format As ConvertEventHandler
‘사용 방법
Dim instance As Binding
Dim handler As ConvertEventHandler

AddHandler instance.Format, handler
public event ConvertEventHandler Format
public:
event ConvertEventHandler^ Format {
    void add (ConvertEventHandler^ value);
    void remove (ConvertEventHandler^ value);
}
/** @event */
public void add_Format (ConvertEventHandler value)

/** @event */
public void remove_Format (ConvertEventHandler value)
JScript에서는 이벤트를 사용할 수 있지만 새로 선언할 수는 없습니다.

설명

Format 이벤트는 데이터 소스에서 컨트롤로 데이터를 가져올 때 발생합니다. Format 이벤트를 처리하여 데이터 소스의 형식 없는 데이터를 표시하기 위해 형식 있는 데이터로 변환할 수 있습니다. 컨트롤에서 데이터 소스로 데이터를 가져올 때는 Parse 이벤트가 발생하여 표시된 값의 형식을 해제한 다음 Format 이벤트가 발생하여 표시할 데이터의 형식을 다시 지정합니다. 이렇게 하면 사용자가 컨트롤에 형식 있는 데이터를 입력하든 형식 없는 데이터를 입력하든 상관없이 바인딩된 컨트롤이 올바르게 형식이 지정된 데이터를 표시하게 됩니다.

FormatParse 이벤트를 사용하여 데이터를 표시하는 데 필요한 사용자 지정 형식을 만들 수 있습니다. 예를 들어, 테이블의 데이터가 Decimal 형식인 경우 ConvertEventArgsValue 속성을 Format 이벤트의 형식이 지정된 값으로 설정하여 현재 위치 형식으로 데이터를 표시할 수 있습니다. 그러므로 결과적으로 Parse 이벤트에서 표시된 값의 형식을 해제해야 합니다.

Format 이벤트는 BindingManagerBaseCurrent 값이 변경될 때마다 발생하며 자세한 내용은 다음과 같습니다.

  • 속성이 처음으로 바인딩될 때 발생합니다.

  • Position이 변경될 때마다 발생합니다.

  • 데이터 바인딩된 목록이 정렬되거나 필터링될 때마다 발생합니다. 이 정렬과 필터링은 DataView에서 목록을 제공하면 수행됩니다.

Format 이벤트는 Parse 이벤트 다음에도 발생합니다. 예를 들어, 컨트롤이 포커스를 잃으면 해당 컨트롤의 내용이 구문 분석됩니다. 새 데이터가 컨트롤에 입력된 직후 Format 이벤트가 발생하여 새 내용에 형식이 지정됩니다.

이벤트 처리에 대한 자세한 내용은 이벤트 사용을 참조하십시오.

예제

다음 코드 예제에서는 Binding을 만들고 ConvertEventHandler 대리자를 ParseFormat 이벤트에 모두 추가한 후 DataBindings 속성을 통해 BindingTextBox 컨트롤의 BindingsCollection에 추가합니다. Format 이벤트에 추가된 DecimalToCurrencyString 이벤트 위임은 ToString 메서드를 사용하여 바인딩된 값(Decimal 형식)을 현재 위치로서 형식 지정합니다. Parse 이벤트에 추가된 CurrencyStringToDecimal 이벤트 위임은 컨트롤에 의해 표시된 값을 다시 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
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:
   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.get_DesiredType().Equals(String.class.ToType())) {
        return;
    }
    // Use the ToString method to format the value as currency ("c").
    cevent.set_Value(((System.Decimal)(cevent.get_Value())).ToString("c"));
} //DecimalToCurrencyString

private void CurrencyStringToDecimal(Object sender, ConvertEventArgs cevent)
{
    // The method converts back to decimal type only. 
    if (!cevent.get_DesiredType().Equals(System.Decimal.class.ToType())) {
        return;
    }
    // Converts the string back to decimal using the static Parse method.
    cevent.set_Value(Decimal.Parse(cevent.get_Value().ToString(), 
        NumberStyles.Currency, null));
} //CurrencyStringToDecimal

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.add_Format(new ConvertEventHandler(DecimalToCurrencyString));
    b.add_Parse(new ConvertEventHandler(CurrencyStringToDecimal));
    text1.get_DataBindings().Add(b);
} //BindControl
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 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework에서 모든 플래폼의 모든 버전을 지원하지는 않습니다. 지원되는 버전의 목록은 시스템 요구 사항을 참조하십시오.

버전 정보

.NET Framework

2.0, 1.1, 1.0에서 지원

.NET Compact Framework

2.0, 1.0에서 지원

참고 항목

참조

Binding 클래스
Binding 멤버
System.Windows.Forms 네임스페이스
Parse
OnFormat