Я бы сделал в подобном случае просто - завел текстовый параметр и уже с ним бы работал.
Но, если так нельзя, то прилагаю ответ программистов (Ваш случай - метод FindControlByName()):
Скрытый текст |
---|
/* Ссылки TFlex.DOCs.UI.Objects.dll TFlex.DOCs.UI.Controls.dll TFlex.DOCs.UI.Types.dll TFlex.DOCs.UI.Common.dll DevExpress.XtraLayout.v12.2.dll DevExpress.Utils.v12.2.dll DevExpress.Data.v12.2.dll DevExpress.XtraEditors.v12.2.dll */ using DevExpress.XtraLayout; using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; using TFlex.DOCs.Model.Macros; using TFlex.DOCs.Model.References; using TFlex.DOCs.UI.Common; using TFlex.DOCs.UI.Controls.LayoutControls; using TFlex.DOCs.UI.Objects.Managers; using TFlex.DOCs.UI.Objects.ReferenceModel; public class Macro : MacroProvider { public Macro(MacroContext context) : base(context) { } public override void Run() { var uiMacroContext = Context as UIMacroContext; if (uiMacroContext == null) return; var app = uiMacroContext.FindCurrentApplicationFormView(); // WorkingPageControl // CustomizeLayoutControl CustomizeLayoutControl customizeLayoutControl = FindControl<CustomizeLayoutControl>(app); if (customizeLayoutControl == null) return; // Наити контрол кнопки Control button = FindControlByName(customizeLayoutControl, "button1"); MessageBox.Show(button.GetType().ToString()); // Найти настройки кнопки BaseLayoutItem buttonLayout = customizeLayoutControl.Items.FindByName("button1"); MessageBox.Show(buttonLayout.GetType().ToString()); } private T FindControl<T>(IApplicationFormView app) where T : Control { Control focusedControl = app.GetFocusedControl(); return FindControl<T>(focusedControl); } private T FindControl<T>(Control childControl) where T : Control { if (childControl is T) return (T)childControl; else if (childControl.Parent == null) return null; return FindControl<T>(childControl.Parent); } private Control FindControlByName(Control control, string name) { if (control.Name == (name + "Control")) return control; foreach (Control childControl in control.Controls) { Control findControl = FindControlByName(childControl, name); if (findControl != null) return findControl; } return null; } public void ShowSelectedObjects() { var uiContext = Context as UIMacroContext; if (uiContext == null) return; var vrs = uiContext.FindReferenceVisualRepresentations(UIMacroContext.FindReferenceVisualRepresentationsType.CurrentApplicationWindow); if (vrs == null) return; var visualRepresentation = vrs.FirstOrDefault( vr => vr.Reference.ParameterGroup.Guid == new Guid("853d0f07-9632-42dd-bc7a-d91eae4b8e83")); // Получаем VisualRepresentation для справочника (по Guid справочника) if (visualRepresentation == null) return; // Выделенные объекты из контрола справочника List<ReferenceObject> referenceObjects = visualRepresentation.GetSelectedObjects() .OfType<ReferenceUIObject>().Select(r => r.ReferenceObject).ToList(); MessageBox.Show(String.Join(Environment.NewLine, referenceObjects)); } } |