2007-08-28 Jonathan Pobst <monkey@jpobst.com>
[mono.git] / mcs / class / Managed.Windows.Forms / System.Windows.Forms / LabelEditTextBox.cs
index 4b1fd73bcaed64ba5f0e7d3986501c90f0712aa1..46c79ef049854780777ebfd5c120a8ecd3fda067 100644 (file)
@@ -42,6 +42,8 @@ namespace System.Windows.Forms {
                                switch (key_data & Keys.KeyCode) {
                                case Keys.Enter:
                                        return true;
+                               case Keys.Escape:
+                                       return true;
                                }
                        }
                        return base.IsInputKey (key_data);
@@ -49,9 +51,22 @@ namespace System.Windows.Forms {
 
                protected override void OnKeyDown (KeyEventArgs e)
                {
-                       if (e.KeyCode == Keys.Return && Visible) {
-                               this.Visible = false;
-                               OnEditingFinished (e);
+                       if (!Visible)
+                               return;
+
+                       switch (e.KeyCode) {
+                               case Keys.Return:
+                                       Visible = false;
+                                       Parent.Focus ();
+                                       e.Handled = true;
+                                       OnEditingFinished (e);
+                                       break;
+                               case Keys.Escape:
+                                       Visible = false;
+                                       Parent.Focus ();
+                                       e.Handled = true;
+                                       OnEditingCancelled (e);
+                                       break;
                        }
                }
 
@@ -62,13 +77,31 @@ namespace System.Windows.Forms {
                        }
                }
 
+               protected void OnEditingCancelled (EventArgs e)
+               {
+                       EventHandler eh = (EventHandler)(Events[EditingCancelledEvent]);
+                       if (eh != null)
+                               eh (this, e);
+               }
+
                protected void OnEditingFinished (EventArgs e)
                {
-                       if (EditingFinished != null)
-                               EditingFinished (this, EventArgs.Empty);
+                       EventHandler eh = (EventHandler)(Events [EditingFinishedEvent]);
+                       if (eh != null)
+                               eh (this, e);
+               }
+
+               static object EditingCancelledEvent = new object ();
+               public event EventHandler EditingCancelled {
+                       add { Events.AddHandler (EditingCancelledEvent, value); }
+                       remove { Events.RemoveHandler (EditingCancelledEvent, value); }
                }
 
-               public event EventHandler EditingFinished;
+               static object EditingFinishedEvent = new object ();
+               public event EventHandler EditingFinished {
+                       add { Events.AddHandler (EditingFinishedEvent, value); }
+                       remove { Events.AddHandler (EditingFinishedEvent, value); }
+               }
        }
 }