private void AddChildButton_Click(object sender, EventArgs e) { var currentControl = (IPredicateBuilderControl)panelBuilderPlaceholder.Controls[0]; var currentPredicate = currentControl.GetPredicateDescription(); _validationBuilder.AddValidationDescription(currentPredicate); // Кнопка ОК и предпросмотр становится активной после того, как // выражение содержит минимально необходимый набор предикатов. // Мы не можем закончить выражение композитным или корневым предикатом if (currentPredicate.Type == PredicateDescriptionType.Root || currentPredicate.Type == PredicateDescriptionType.CollectionComposite || currentPredicate.Type == PredicateDescriptionType.ObjectComposite) { ButtonOK.Enabled = false; } else { ButtonOK.Enabled = true; UpdatePreview(); } ValidationTreeView.Nodes.Clear(); var currentNode = new TreeNode { Text = _validationBuilder.RootPredicate.ToString(), Tag = _validationBuilder.RootPredicate }; ValidationTreeView.Nodes.Add(currentNode); AddChildNodes(currentNode, _validationBuilder.RootPredicate.Children); ValidationTreeView.ExpandAll(); panelBuilderPlaceholder.Controls.Clear(); }
private void ValidationTreeView_MouseUp(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right) { ValidationTreeView.SelectedNode = ValidationTreeView.GetNodeAt(e.X, e.Y); if (ValidationTreeView.SelectedNode != null) { var activePredicate = (PredicateDescriptionNode)ValidationTreeView.SelectedNode.Tag; if (activePredicate.Type != PredicateDescriptionType.Object && activePredicate.Type != PredicateDescriptionType.Collection) { menu.Show(ValidationTreeView, e.Location); } } else if (ValidationTreeView.Nodes.Count == 0) { menu.Show(ValidationTreeView, e.Location); } } }