Итак, что я посмотрел, как обстоит дело с динамическим добавлением контролов в таблицу.
Задача делится на две подзадачи:
а) определение количества и типов столбцов (как я понимаю информация будет браться из FormDataSource)
б) динамическое добавление этих столбцов в FormTableControl
Как я понимаю, пункт а) не представляет большой сложности (хотя я могу и ошибаться), так что насчет пункта б):
Вот я набросал одну формочку - на ней Table и две кнопки. При нажатии на одну из них в таблицу добавляется поле целого типа, при нажатии на другую - в таблицу добавляется поле типа Data. Естественно типов может быть и больше.
Несколько замечаний:
1. В таблице в дизайнере необходимо первоначально создать хотя бы один контрол, иначе даже при добавлении контролов в run-time изменения не видны. Если ты знаешь как это побороть - скажи, я поправлю.
2. Так как невозможно создать массив объектов, приходится создавать эти объекты динамически, а для этого пришлось завести массив, в котором хранятся типы столбцов. Хотя тут можно будет реализовать и более удачную конструкцию типа контейнера или map'а.
Далее насчет динамического перекрытия методов создаваемых контролов. Я там поэкспериментировал маленько: на форме есть метод createMessageHandler, в который мы передаем имя создаваемого метода и текст метода. Собственно сам createMessageHandler создает этот метод, который и будет обрабатывать требуемые события. Метод вызывается при добавлении в таблицу нового столбца, то есть нажатии на клавишу.
Для реализации этого пришлось пойти на следующие допущения:
1. Ввести ситему именования создаваемых контролов (тип+номер столбца, например int2, date3), а следовательно и методов (int2_textChange)
Недостаток этого подхода: при нажатии на клавишу - создается столбец в таблице, создается контрол в таблице, контрол привязывается к столбцу и даже создается обработчик для этого контрола. НО, чтобы этот обработчик заработал, надо открыть и закрыть форму. Именно поэтому, я и не стал писать код, удаляющий динамически созданный обработчик событий.
Посмотри сам: открой в АОТ методы формы и запусти форму, понажимай на клавиши и увидишь, как в АОТ появляются методы. Но они пока не действуют. А теперь закрой форму, и снова запусти ее, НО не удаляя созданные методы. Теперь все работает.
Хотя нет, написал и сам понял. Все нормально. Эти методы в форму у нас будет добавлять класс. Затем, и только затем, эта форма будет запускаться нашим классом, а по окончании ее работы, класс будет уничтожать созданные методы. В этом случае все будт работать.
Но я еще не вижу все картины, поэтоиу не могу сказать, как делать лучше
Что ты думаешь по этому поводу ?