ListView.OnAfterLabelEdit(LabelEditEventArgs) Method

Definition

引发 AfterLabelEdit 事件。Raises the AfterLabelEdit event.

protected:
 virtual void OnAfterLabelEdit(System::Windows::Forms::LabelEditEventArgs ^ e);
protected virtual void OnAfterLabelEdit (System.Windows.Forms.LabelEditEventArgs e);
abstract member OnAfterLabelEdit : System.Windows.Forms.LabelEditEventArgs -> unit
override this.OnAfterLabelEdit : System.Windows.Forms.LabelEditEventArgs -> unit
Protected Overridable Sub OnAfterLabelEdit (e As LabelEditEventArgs)

Parameters

e
LabelEditEventArgs

一个包含事件数据的 LabelEditEventArgsA LabelEditEventArgs that contains the event data.

Examples

下面的代码示例演示如何使用 AfterLabelEdit 事件将新编辑的标签限制为字母表中的字符。The following code example demonstrates how to use the AfterLabelEdit event to restrict a newly edited label to characters in the alphabet. 该示例使用 ASCIIEncoding 类获取新标签的每个字符的 ASCII 字符代码。The example uses the ASCIIEncoding class to obtain the ASCII character code of each character of the new label. 如果该字符在表示数字的 ASCII 代码之间,则新标签不能应用于该项目。If the character falls between the ASCII codes that represent numbers, the new label cannot be applied to the item. 此示例要求你已在窗体上创建了 ListView 控件并向其中添加了项。This example requires that you have created a ListView control on a form and added items to it. 该示例还要求您已将 AfterLabelEdit 事件连接到在代码示例中定义的事件处理程序。The example also requires that you have connected the AfterLabelEdit event to the event handler defined in the example code. 为了使用 ASCIIEncoding 类,您的文件必须包含 System.Text 命名空间。In order to use the ASCIIEncoding class, your file must include the System.Text namespace.

private:
   void MyListView_AfterLabelEdit( Object^ /*sender*/, System::Windows::Forms::LabelEditEventArgs^ e )
   {
      // Determine if label is changed by checking for 0.
      if ( e->Label == nullptr )
               return;

      // ASCIIEncoding is used to determine if a number character has been entered.
      ASCIIEncoding^ AE = gcnew ASCIIEncoding;

      // Convert the new label to a character array.
      array<Char>^temp = e->Label->ToCharArray();

      // Check each character in the new label to determine if it is a number.
      for ( int x = 0; x < temp->Length; x++ )
      {
         // Encode the character from the character array to its ASCII code.
         array<Byte>^bc = AE->GetBytes( temp[ x ].ToString() );

         // Determine if the ASCII code is within the valid range of numerical values.
         if ( bc[ 0 ] > 47 && bc[ 0 ] < 58 )
         {
            // Cancel the event and return the lable to its original state.
            e->CancelEdit = true;

            // Display a MessageBox alerting the user that numbers are not allowed.
            MessageBox::Show( "The text for the item cannot contain numerical values." );

            // Break out of the loop and exit.
            return;
         }
      }
   }
private void MyListView_AfterLabelEdit(object sender, System.Windows.Forms.LabelEditEventArgs e)
{
 
   // Determine if label is changed by checking for null.
   if (e.Label == null)
      return;

   // ASCIIEncoding is used to determine if a number character has been entered.
   ASCIIEncoding AE = new ASCIIEncoding();
   // Convert the new label to a character array.
   char[] temp = e.Label.ToCharArray();

   // Check each character in the new label to determine if it is a number.
   for(int x=0; x < temp.Length; x++)
   {
      // Encode the character from the character array to its ASCII code.
      byte[] bc = AE.GetBytes(temp[x].ToString());
   
      // Determine if the ASCII code is within the valid range of numerical values.
      if(bc[0] > 47 && bc[0] < 58)
      {
         // Cancel the event and return the lable to its original state.
         e.CancelEdit = true;
         // Display a MessageBox alerting the user that numbers are not allowed.
         MessageBox.Show ("The text for the item cannot contain numerical values.");
         // Break out of the loop and exit.
         return;
      }
   }
}
Private Sub MyListView_AfterLabelEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.LabelEditEventArgs) Handles listView1.AfterLabelEdit

   ' Determine if label is changed by checking to see if it is equal to Nothing.
   If e.Label Is Nothing Then
      Return
   End If
   ' ASCIIEncoding is used to determine if a number character has been entered.
   Dim AE As New ASCIIEncoding()
   ' Convert the new label to a character array.
   Dim temp As Char() = e.Label.ToCharArray()

   ' Check each character in the new label to determine if it is a number.
   Dim x As Integer
   For x = 0 To temp.Length - 1
      ' Encode the character from the character array to its ASCII code.
      Dim bc As Byte() = AE.GetBytes(temp(x).ToString())

      ' Determine if the ASCII code is within the valid range of numerical values.
      If bc(0) > 47 And bc(0) < 58 Then
         ' Cancel the event and return the lable to its original state.
         e.CancelEdit = True
         ' Display a MessageBox alerting the user that numbers are not allowed.
         MessageBox.Show("The text for the item cannot contain numerical values.")
         ' Break out of the loop and exit.
         Return
      End If
   Next x
End Sub

Remarks

引发事件时,将通过委托调用事件处理程序。Raising an event invokes the event handler through a delegate. 有关详细信息,请参阅处理和引发事件For more information, see Handling and Raising Events.

OnAfterLabelEdit 方法还允许派生类对事件进行处理而不必附加委托。The OnAfterLabelEdit method also allows derived classes to handle the event without attaching a delegate. 这是在派生类中处理事件的首选技术。This is the preferred technique for handling the event in a derived class.

Notes to Inheritors

在派生类中重写 OnAfterLabelEdit(LabelEditEventArgs) 时,一定要调用基类的 OnAfterLabelEdit(LabelEditEventArgs) 方法,以便已注册的委托对事件进行接收。When overriding OnAfterLabelEdit(LabelEditEventArgs) in a derived class, be sure to call the base class's OnAfterLabelEdit(LabelEditEventArgs) method so that registered delegates receive the event.

Applies to

See also