Совет по реализации: привязка кнопки (события Click) к функции, а также к другому элементу управления

Я разрабатываю небольшую программу C#-winforms, в которой есть функция, позволяющая пользователям добавлять кнопки и различные элементы управления во время выполнения.

Сценарий, с которым я сталкиваюсь, выглядит следующим образом:

    1) User adds a button and sets its properties (through a Dialog).
    2) User adds a another control (also sets its properties).
    3) User chooses the button and chooses bind from a Menu-strip item.
    4) a new dialog will show , a DropDown menu will show all "other controls" , another DropDown will show (pre-coded) functions , users have to choose 1 of the controls and a function to bind them to the button's click event.
    5) When the user chooses to release his design, an EXE file will be generated that will have the simple program the user designed (still thinking this step over )

Моя текущая идея реализации:
Словарь будет содержать все кнопки и соответствующие им связанные функции и элементы управления.. (Key = buttonID , Value = объект или словарь, содержащий имя функции и идентификатор элемента управления)..

Когда пользователь выбирает «Выпустить» свой дизайн, код создает форму и все элементы управления в виде ТЕКСТА и использует словарь для создания соответствующей кнопки кода, чтобы связать событие нажатия каждой кнопки с соответствующей функцией.

В ТЕКСТ также будут вставлены другие словари, которые будут сопоставлять каждую кнопку с ее связанным элементом управления (словарь для каждой функции), это будет использоваться, когда функция вызывается для различения между кнопками и различными связанными элементами управления.

ТЕКСТ будет вставлен в файл .cs, который будет скомпилирован для создания EXE (все еще думает о способах автоматизации этого шага).

Я чувствую, что это решение слишком сложное и что могут быть другие более простые решения.

ТИА

РЕДАКТИРОВАТЬ:
Это простой проект, целью которого является помочь непрограммистам создавать свои собственные простые программы, такие как инвентаризация супермаркета или библиотека DVD-магазина. На данный момент он будет выполнять простые задачи калькулятора (1 текстовое поле, пара кнопок и функций, таких как ADD, Subtract и тому подобное).


person Madi D.    schedule 08.01.2010    source источник


Ответы (1)


я думаю, что компиляция «Программы», которая будет разработана пользователем, была бы ужасной идеей. Что вы можете сделать, так это сериализовать созданные объекты и записать их в файл, который можно десериализовать и загрузить в вашу программу, чтобы отобразить созданную пользователями «программу». если все функции будут предопределены, вы можете использовать уникальный ключ, хранящийся в новом классе, расширенном из класса кнопок, чтобы указать, какую функцию вы хотите связать с кнопкой. вы можете захотеть сохранить массивы объектов, которые пользователь может использовать, которые могут быть «настроены» со всеми их видимыми свойствами, установленными в false для начала. Я не уверен, требуется ли компиляция программы, созданной пользователями, или возможно ли использование вашей программы в качестве настраиваемой программы путем подключения к ней сериализованных объектов.

Какова именно желаемая цель программы?

Надеюсь, я помогу каким-то образом привнести новые идеи в ваш дизайн. Если вы можете дать мне больше информации, я мог бы попытаться сделать пример кода, на который вы могли бы посмотреть.

person Skintkingle    schedule 09.01.2010
comment
Спасибо за идеи, я добавляю более подробную информацию о самой программе. - person Madi D.; 09.01.2010
comment
Я компилирую пользовательский код, чтобы сделать полученный exe-файл переносимым на другие ПК, также мне пришла в голову возможность сериализации пользовательского дизайна, однако, поскольку он может создавать несколько дизайнов для выпуска, сериализация больше подходит для функций сохранения/открытия. - person Madi D.; 09.01.2010
comment
как насчет полной файловой структуры. например, все сериализованные объекты в пользовательской программе Calc хранятся в Calc/. в котором хранятся сериализованные объекты. Это позволило бы создать более одного дизайна и позволило бы 2 кнопкам 1 существовать в одном и том же пространстве, не перезаписывая друг друга. затем один текстовый файл с именем каталога, который вы хотите, чтобы ваша программа загружала в корень. - person Skintkingle; 09.01.2010