Рекомендации по созданию пользовательского контрола в качестве лукапа

Требования к контролу

Для того чтобы возможно было генерировать произвольный контрол в качестве лукапа, необходимо, чтобы он реализовывал интерфейс ICSSoft.STORMNET.Windows.Forms.ILookup. Если контрол не реализует интерфейс ICSSoft.STORMNET.Windows.Forms.ICustomizableControl, то он будет просто сгенерирован без адекватной настройки собственных свойств.

В примере будет рассмотрена генерация ExtLookUpTextControl.

Генерация

В настройках стадии нужно выбрать вкладку “Дополнительно” и нажать кнопку “Дополнительные настройки”.

Выбрать сборку, содержащую контрол. Значение в колонке “Название” можно изменить.

Открыть представление объекта, где есть ссылка на мастера. И в настройках лукапа указать:

  • Тип лукапа - custom
  • В ComboBox Имя Лукапа - имя контрола, которое было указано в настройках стадии
  • Свойство мастера - свойство мастера, к которому будет привязываться (binding) контрол. Например, для предиктивного ввода.

Сгенерировать приложение как обычно. Запустить. В итоге будет получена форма со сгенерированным контролом.

Полученный код

В сгенерированной форме создается контрол

protected ICSSoft.STORMNET.Windows.Forms.ExtLookUpTextControl ctrlПорода;

Добавляется информация о контроле

m_arrLookupInformations.Add(new ICSSoft.STORMNET.UI.LookupInformation(this.ctrlПорода, "Порода", "STORMCASE.STORMNET.Generator.SerializeNewEditForm/EditPanel(Panel)/ctrlПорода(Ext" + "LookUpTextControl)", null));

Прописываются биндинги для EditManager

EditManager.Bindings = new ICSSoft.STORMNET.Windows.Forms.Design.Binds("КИЛ_КошкаE", typeof(IIS.КошкиСЛапами.Кошка), new ICSSoft.STORMNET.Windows.Forms.Design.OneBind[] {
            new ICSSoft.STORMNET.Windows.Forms.Design.OneBind(ctrlПорода, typeof(ICSSoft.STORMNET.Windows.Forms.ExtLookUpTextControl), "Value", null, "Порода"),
            ...
            );

Проставляются свойства контролу

ctrlПорода.DataObjectTypes = null;
ctrlПорода.EditManagerForBind = null;
ctrlПорода.HierarchyField = "";
ctrlПорода.InGridProperty = null;
ctrlПорода.LimitFunction = null;
ctrlПорода.Location = new System.Drawing.Point(56, 12);
ctrlПорода.MaximumSize = new System.Drawing.Size(3000, 20);
ctrlПорода.Name = "ctrlПорода";
ctrlПорода.Property = null;
ctrlПорода.PropForBind = "";
ctrlПорода.PropForUpdate = "";
ctrlПорода.ReadOnly = false;
ctrlПорода.ReadOnlyText = false;
ctrlПорода.Size = new System.Drawing.Size(150, 20);
ctrlПорода.StringedValue = null;
ctrlПорода.SymbolsToIntellisense = 1;
ctrlПорода.TabIndex = 1;
ctrlПорода.Value = null;
ctrlПорода.ViewName = null;
ctrlПорода.ИспользоватьОтображСвойствоПриВводе = false;
ctrlПорода.ОтображаемоеСвойство = null;
ctrlПорода.ОтображатьВсеПоляПриLookup = true;
ctrlПорода.РежимВводаЗначений = false;
ctrlПорода.РежимМастерСтрокой = false;