Просмотр исходного кода

* TreeView.cs:
* TreeNode.cs: Raise events no matter how the treenode is
checked. Patch by Don Edvalson.


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

Jackson Harper 20 лет назад
Родитель
Сommit
38cb26537d

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

@@ -1,3 +1,9 @@
+2006-01-30  Jackson Harper  <[email protected]>
+
+	* TreeView.cs:
+	* TreeNode.cs: Raise events no matter how the treenode is
+	checked. Patch by Don Edvalson.
+
 2006-01-30  Jackson Harper  <[email protected]>
 
 	* TreeNode.cs: Signature fix.

+ 12 - 4
mcs/class/Managed.Windows.Forms/System.Windows.Forms/TreeNode.cs

@@ -41,6 +41,7 @@ namespace System.Windows.Forms {
 		private int image_index = -1;
 		private int selected_image_index = -1;
 		internal TreeNodeCollection nodes;
+		internal TreeViewAction check_reason = TreeViewAction.Unknown;
 		
 		private bool is_expanded = false;
 		private Rectangle bounds = Rectangle.Empty;
@@ -121,7 +122,7 @@ namespace System.Windows.Forms {
 			tn.Checked = Checked;
 			if (prop_bag != null)
 				tn.prop_bag = OwnerDrawPropertyBag.Copy (prop_bag);
-			return tn;
+			return tn;	
 		}
 
 		#endregion	// ICloneable Members
@@ -171,10 +172,17 @@ namespace System.Windows.Forms {
 			set {
 				if (check == value)
 					return;
-				check = value;
-
+			        TreeViewCancelEventArgs args = new TreeViewCancelEventArgs (this, false, check_reason);
 				if (TreeView != null)
-					TreeView.UpdateNode (this);
+					TreeView.OnBeforeCheck (args);
+				if (!args.Cancel) {
+					check = value;
+					if (TreeView != null) {
+						TreeView.OnAfterCheck (new TreeViewEventArgs (this, check_reason));
+						TreeView.UpdateNode (this);
+					}
+				}
+				check_reason = TreeViewAction.Unknown;
 			}
 		}
 

+ 7 - 11
mcs/class/Managed.Windows.Forms/System.Windows.Forms/TreeView.cs

@@ -631,15 +631,10 @@ namespace System.Windows.Forms {
 			base.OnKeyDown (e);
 
 			if (!e.Handled && checkboxes &&
-					selected_node != null &&
-					(e.KeyData & Keys.KeyCode) == Keys.Space) {
-				TreeViewCancelEventArgs args = new TreeViewCancelEventArgs (
-					selected_node, false, TreeViewAction.ByKeyboard);
-				OnBeforeCheck (args);
-				if (!args.Cancel) {
-					selected_node.Checked = !selected_node.Checked;
-					OnAfterCheck (new TreeViewEventArgs (selected_node, TreeViewAction.ByKeyboard));
-				}
+           		     selected_node != null &&
+			    (e.KeyData & Keys.KeyCode) == Keys.Space) {
+				selected_node.check_reason = TreeViewAction.ByKeyboard;
+				selected_node.Checked = !selected_node.Checked;		
 				e.Handled = true;
 			}
 		}
@@ -664,7 +659,7 @@ namespace System.Windows.Forms {
 				ItemDrag (this, e);
 		}
 
-		protected virtual void OnAfterCheck (TreeViewEventArgs e) {
+		protected internal virtual void OnAfterCheck (TreeViewEventArgs e) {
 			if (on_after_check != null)
 				on_after_check (this, e);
 		}
@@ -689,7 +684,7 @@ namespace System.Windows.Forms {
 				on_after_select (this, e);
 		}
 
-		protected virtual void OnBeforeCheck (TreeViewCancelEventArgs e) {
+		protected internal virtual void OnBeforeCheck (TreeViewCancelEventArgs e) {
 			if (on_before_check != null)
 				on_before_check (this, e);
 		}
@@ -1393,6 +1388,7 @@ namespace System.Windows.Forms {
 				node.Toggle ();
 				return;
 			} else if (checkboxes && IsCheckboxArea (node, e.X)) {
+				node.check_reason = TreeViewAction.ByMouse;
 				node.Checked = !node.Checked;
 				UpdateNode(node);
 				return;