Tuesday, May 3, 2011

Windows forms Text Changed on leave event

Maybe I'm just an idiot, but I can't seem to find an event that will fire for a textbox at the same time as the leave, but only when the contents of the textbox has changed. Kinda like a combination of textchanged and leave. I can't use textchanged cause it fires on each keystroke. Right now I'm storing the current value of the textbox in a variable and comparing it on the leave event, but it seems really hackish.

Thanks

From stackoverflow
  • You can create your own (derived) class which overrides OnEnter, OnLeave and OnTextChanged to set flags and trigger "your" event.

    Something like this:

     public class TextBox: System.Windows.Forms.TextBox {
      public event EventHandler LeaveWithChangedText;
    
      private bool textChanged;
    
      protected override void OnEnter(EventArgs e) {
       textChanged = false;
       base.OnEnter(e);
      }
    
      protected override void OnLeave(EventArgs e) {
       base.OnLeave(e);
       if (textChanged) {
        OnLeaveWithChangedText(e);
       }
      }
    
      protected virtual void OnLeaveWithChangedText(EventArgs e) {
       if (LeaveWithChangedText != null) {
        LeaveWithChangedText(this, e);
       }
      }
    
      protected override void OnTextChanged(EventArgs e) {
       textChanged = true;
       base.OnTextChanged(e);
      }
     }
    
    Rob : Yeah, that's probably a better approach than what I'm doing. I just wanted to make sure I wasn't missing something obvious...
    Rob : Wow... that's impressive.. I didn't consider overriding both events... damn good idea..

0 comments:

Post a Comment