Инструменты пользователя

Инструменты сайта


Боковая панель

developers:tutorial:dlgandpropertygrid

Это старая версия документа.


Таблицы и диалоги

Для быстрого и удобного оформления диалогов программный комплекс Топоматик Робур предлагает несколько разных классов, в том числе SimpleDlg - это стандартный класс, предназначенный для создания модальных диалогов. Он поддерживает стандартный стиль оформления, характерный для всех диалогов программного комплекса, и обладает простым и удобным функционалом.

Для вывода простых информационных сообщений и сообщений о ошибках используется MessageDlg. Достаточно вызвать статический метод MessageDlg.Show с требуемым сообщением.

Достаточно создать наследника от SimpleDlg и перекрыть два метода:

  • DoInit() - метод вызывается при инициализации диалога, на нём необходимо инициализировать содержимое диалога
  • DoCommit() - метод вызывается, если пользователь выбрал кнопку ОК на диалоге. Необходимо проверить введённые данные, и в качестве результата вернуть - являются ли данные корректными. В случае если данные некорректны диалог не будет закрыт.
Метод DoGetModifiedWarning класса SimpleDlg может быть использован, если необходимо предупредить пользователя о том, что он нажимает кнопку Отмена, а на диалог были внесены изменения. Для этого метод должен вернуть есть ли на диалоге какие-либо изменения.

Достаточно часто бывает необходимо представить данные в виде редактируемой таблицы. Программный комплекс Топоматик Робур предоставляет для этого элемент управления EditTableFrame. Этот элемент предназначен для отображения таблицы со всеми необходимыми кнопками управления.

Для отображения диалогов, состоящих из одной таблицы можно использовать класс EditTableDlg. Для этого необходимо вызвать статический метод класса EditTableDlg.Execute

Для того чтобы заполнить таблицу данными необходимо присвоить свойство Wrapper у экземпляра EditTableFrame. Поведение и вид элемента управления элемент управления EditTableFrame зависят от реализации класса, назначенного свойству Wrapper и поддержки следующих интерфейсов:

  • Интерфейс IEnumerable, таблица доступна только для редактирования элементов, удаление и добавление строк недоступно
  • Интерфейсы IList и IActivator, доступно добавление и удаление строк
  • Интерфейс ISupportClipboard, поддерживается возможность копирования и вставки строк через буфер обмена
  • Интерфейс ISupportInterpolation, поддерживается возможность интерполирования между строками таблицы
Для более быстрого создания таблиц можно воспользоваться сервисным классом SimpleChangeTrackingWrapper. Этот класс реализует интерфейсы IList и IChangeTracking. При его использовании необходимо на конструкторе создать объекты и заполнить ими свойство Items, а на перекрытой функции AcceptChanges заполнить данные модели по объектам этого свойства. Также необходимо поддержать интерфейс IActivator

Каждый элемент перечисления описывает строку в таблице. Заголовок таблицы строится на основании списка свойств этого элемента, используя атрибуты DisplayName и Category. Например, если элемент перечисления реализован следующим образом:

...
   class Item
   {
      [DisplayName("Пикет"), Category("Узлы")]
      public string Pk
      {
         get;set;
      }
 
      [DisplayName("Плюс"), Category("Узлы")]      
      public string Plus
      {
         get;set;
      }
 
      [DisplayName("Отметка, м"), Category("Узлы"), DefaultDouble]      
      public double Elevation
      {
         get;set;
      }
   }
...

Наша таблица будет выглядеть примерно так:

Отображение свойств в таблице настраивается с помощью разнообразных атрибутов, наследованных от PropertyTypeConverter, PropertyEditor и PropertyProvider. Более подробно они описаны в других разделах Руководства
developers/tutorial/dlgandpropertygrid.1549819213.txt.gz · Последние изменения: 2021/07/22 14:28 (внешнее изменение)