65.9K
CodeProject is changing. Read more.
Home

Adding Functionality To .NET Controls

starIconstarIconstarIconemptyStarIconemptyStarIcon

3.00/5 (2 votes)

Aug 7, 2014

CPOL
viewsIcon

9030

This is an alternative for "Adding Functionality To .NET Controls"

Introduction

Demonstrates an event handler to clear the Text of a Control after some timeout period.

Background

The Tip to which I offer this as an alternative deals with wrapping a Control in order to add functionality. But, as I noted in my comment, the particular functionality demonstrated doesn't require wrapping the Control; all it requires is an event handler, which can belong to any class.

The related Tip is a good demonstration of wrapping a Control, but wrapping should probably be a last resort.

Using the code

The static class below provides an event handler suitable for the TextChanged event of any WinForms Control:

label1.TextChanged += TextClearer.ClearText ;

Later in the application the Control may have its Text changed to some value:

label1.Text = "Done" ;

The Interval defaults to five seconds, but it can be changed as needed. The Interval value in place when the event handler is called will be used.

TextClearer.Interval = 10 ;

TextClearer: A static class that simply provides an event handler

This is a very simply class, with only the minimum features required for this simple demonstration.

  public static partial class TextClearer
  {
    public static int Interval = 5 ;

    public static void 
    ClearText
    (
      object           control
    , 
      System.EventArgs textchanged
    )
    {
      System.Windows.Forms.Control c = control as System.Windows.Forms.Control ;

      if ( ( Interval > 0 ) && ( c != null ) && ( c.Text.Length > 0 ) )
      {
        System.Windows.Forms.Timer t = new System.Windows.Forms.Timer() 
        {
          Interval = Interval * 1000
        } ;

        t.Tick += delegate
        (
          object           timer
        , 
          System.EventArgs tick
        ) 
        {
          t.Stop() ;

          c.Text = System.String.Empty ;
          
          return ;
        } ;

        t.Start() ;
      }

      return ;
    }
  }

History

2014-08-07 First submitted