Prechádzať zdrojové kódy

* LabelEditTextBox.cs:
* TreeView.cs: Use a new LabelEdit class for node editing, this
class automatically 'closes' itself when it gets the enter key
or
loses focus.


svn path=/trunk/mcs/; revision=62645

Jackson Harper 19 rokov pred
rodič
commit
abf821eb88

+ 1 - 0
mcs/class/Managed.Windows.Forms/System.Windows.Forms.dll.sources

@@ -377,6 +377,7 @@ System.Windows.Forms/KeysConverter.cs
 System.Windows.Forms/Label.cs
 System.Windows.Forms/LabelEditEventArgs.cs
 System.Windows.Forms/LabelEditEventHandler.cs
+System.Windows.Forms/LabelEditTextBox.cs
 System.Windows.Forms/LayoutEngine.cs
 System.Windows.Forms/LayoutEventArgs.cs
 System.Windows.Forms/LayoutEventHandler.cs

+ 7 - 0
mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog

@@ -1,3 +1,10 @@
+2006-07-15  Jackson Harper  <[email protected]>
+
+	* LabelEditTextBox.cs:
+	* TreeView.cs: Use a new LabelEdit class for node editing, this
+	class automatically 'closes' itself when it gets the enter key or
+	loses focus.	
+	
 2006-07-14  Jackson Harper  <[email protected]>
 
 	* TreeNode.cs:

+ 74 - 0
mcs/class/Managed.Windows.Forms/System.Windows.Forms/LabelEditTextBox.cs

@@ -0,0 +1,74 @@
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+// Copyright (c) 2006 Novell, Inc.
+//
+// Authors:
+//	Jackson Harper ([email protected])
+//
+//
+
+// This is an internal class that allows us to use a textbox for label editing
+// in the tree and in listview.  The textbox will make itself invisible when
+// the user pressed the enter key
+
+namespace System.Windows.Forms {
+
+	internal class LabelEditTextBox : FixedSizeTextBox {
+
+		public LabelEditTextBox () : base (true, true)
+		{
+		}
+
+		protected override bool IsInputKey (Keys key_data)
+		{
+			if ((key_data & Keys.Alt) == 0) {
+				switch (key_data & Keys.KeyCode) {
+				case Keys.Enter:
+					return true;
+				}
+			}
+			return base.IsInputKey (key_data);
+		}
+
+		protected override void OnKeyDown (KeyEventArgs e)
+		{
+			if (e.KeyCode == Keys.Return && Visible) {
+				this.Visible = false;
+				OnEditingFinished (e);
+			}
+		}
+
+		protected override void OnLostFocus (EventArgs e)
+		{
+			if (Visible) {
+				OnEditingFinished (e);
+			}
+		}
+
+		protected void OnEditingFinished (EventArgs e)
+		{
+			if (EditingFinished != null)
+				EditingFinished (this, EventArgs.Empty);
+		}
+
+		public event EventHandler EditingFinished;
+	}
+}
+

+ 5 - 12
mcs/class/Managed.Windows.Forms/System.Windows.Forms/TreeView.cs

@@ -58,7 +58,7 @@ namespace System.Windows.Forms {
 		private int indent = 19;
 
 		private NodeLabelEditEventArgs edit_args;
-		private TextBox edit_text_box;
+		private LabelEditTextBox edit_text_box;
 		internal TreeNode edit_node;
 		
 		private bool checkboxes;
@@ -1138,13 +1138,7 @@ namespace System.Windows.Forms {
 			}
 		}
 
-		private void EditTextBoxKeyDown (object sender, KeyEventArgs e)
-		{
-			if (e.KeyCode == Keys.Return)
-				edit_text_box.Visible = false;
-		}
-
-		private void EditTextBoxLostFocus (object sender, EventArgs e)
+		private void LabelEditFinished (object sender, EventArgs e)
 		{
 			EndEdit (edit_node);
 		}
@@ -1155,11 +1149,10 @@ namespace System.Windows.Forms {
 				EndEdit (edit_node);
 
 			if (edit_text_box == null) {
-				edit_text_box = new FixedSizeTextBox ();
+				edit_text_box = new LabelEditTextBox ();
 				edit_text_box.BorderStyle = BorderStyle.FixedSingle;
-				edit_text_box.KeyUp += new KeyEventHandler (EditTextBoxKeyDown);
-				edit_text_box.LostFocus += new EventHandler (EditTextBoxLostFocus);
-				Controls.AddImplicit (edit_text_box);
+				edit_text_box.EditingFinished += new EventHandler (LabelEditFinished);
+				Controls.Add (edit_text_box);
 			}
 
 			edit_text_box.Bounds = node.Bounds;