/// <summary> /// Occurs when the <see cref="E:System.Windows.Forms.TreeView.NodeMouseClick"></see> event is fired /// -- that is, when a node in the tree view is clicked. /// </summary> /// <param name="e">A <see cref="T:System.Windows.Forms.TreeNodeMouseClickEventArgs"></see> that contains the event data.</param> protected override void OnNodeMouseClick(TreeNodeMouseClickEventArgs e) { // Are we dealing with a dropdown node? if (e.Node is DropDownTreeNode) { this.m_CurrentNode = (DropDownTreeNode)e.Node; // Need to add the node's ComboBox to the TreeView's list of controls for it to work this.Controls.Add(this.m_CurrentNode.ComboBox); // Set the bounds of the ComboBox, with a little adjustment to make it look right this.m_CurrentNode.ComboBox.SetBounds( this.m_CurrentNode.Bounds.X - 1, this.m_CurrentNode.Bounds.Y - 2, this.m_CurrentNode.Bounds.Width + 25, this.m_CurrentNode.Bounds.Height); // Listen to the SelectedValueChanged event of the node's ComboBox this.m_CurrentNode.ComboBox.SelectedValueChanged += new EventHandler(ComboBox_SelectedValueChanged); this.m_CurrentNode.ComboBox.DropDownClosed += new EventHandler(ComboBox_DropDownClosed); // Now show the ComboBox this.m_CurrentNode.ComboBox.Show(); this.m_CurrentNode.ComboBox.DroppedDown = true; } base.OnNodeMouseClick(e); }
/// <summary> /// Method to hide the currently-selected node's ComboBox /// </summary> private void HideComboBox() { if (this.m_CurrentNode != null) { // Unregister the event listener this.m_CurrentNode.ComboBox.SelectedValueChanged -= ComboBox_SelectedValueChanged; this.m_CurrentNode.ComboBox.DropDownClosed -= ComboBox_DropDownClosed; // Copy the selected text from the ComboBox to the TreeNode this.m_CurrentNode.Text = this.m_CurrentNode.ComboBox.Text; // Hide the ComboBox this.m_CurrentNode.ComboBox.Hide(); this.m_CurrentNode.ComboBox.DroppedDown = false; // Remove the control from the TreeView's list of currently-displayed controls this.Controls.Remove(this.m_CurrentNode.ComboBox); // And return to the default state (no ComboBox displayed) this.m_CurrentNode = null; } }