2010-01-08 2 views
0

사용자가 런타임에 버튼과 다른 컨트롤을 추가 할 수있게 해주는 작은 C# -winforms 프로그램을 개발 중입니다. 다음은구현 조언 : 함수에 대한 버튼 (클릭 이벤트)과 다른 컨트롤에 대한 바인딩

내가 직면하고 시나리오이다

    1) 사용자가 버튼을 가산)을 통해 대화 (속성을 설정한다.
    2) 사용자가 다른 컨트롤을 추가합니다 (속성도 설정).
    3) 사용자가 버튼을 선택하고 메뉴 스트립 항목에서 바인드를 선택합니다.
    4) 새로운 대화 상자가 표시됩니다. 드롭 다운 메뉴에 모든 "다른 컨트롤"이 표시되고, 다른 드롭 다운에 (미리 코딩 된) 기능이 표시되며 사용자는 컨트롤 중 하나를 선택해야하며 버튼의 클릭에 바인딩하는 기능이 있어야합니다 행사.
    5) 사용자가 자신의 디자인을 출시 할 선택하면, EXE 파일은 간단한 프로그램을 것 생성됩니다 여전히 이상이 단계를) 생각 (설계 사용자

내 현재 구현 아이디어 :
사전 적 것 (Key = buttonID, Value = 객체 또는 사전에 함수 이름과 컨트롤 ID가 있습니다.)

사용자가 디자인을 "릴리스"하기로 선택하면 코드는 다음과 같이됩니다. 양식 및 모든 컨트롤을 TEXT로 구성하고 사전을 사용하여 적절한 버튼을 생성하여 각 버튼의 클릭 이벤트를 적절한 기능에 연결하십시오.

TEXT에는 각 단추를 바운드 컨트롤 (각 기능에 대한 사전)에 매핑하는 또 다른 사전이 삽입되어 있습니다.이 기능은 다른 바운드 컨트롤 간의 단추를 구별하기 위해 함수가 호출 될 때 사용됩니다.

TEXT는 EXE를 생성하기 위해 컴파일되는 .cs 파일에 삽입됩니다 (이 단계를 자동화하는 방법은 여전히 ​​생각 중입니다).

나는이 솔루션이 너무 복잡하고 다른 간단한 솔루션이있을 것이라고 생각합니다.

TIA

편집 :
이 프로그래머가 아닌 슈퍼마켓 재고, 또는 DVD 매장 라이브러리처럼, 자신의 간단한 프로그램을 만들 수 있도록하는 것을 목표로 간단한 프로젝트입니다. 지금은 간단한 계산기 작업 (1 텍스트 상자, 몇 가지 버튼 및 ADD, 빼기 등의 기능)을 수행합니다.

답변

1

나는 사용자가 디자인하게 될 "프로그램"을 컴파일하는 것은 끔찍한 생각이라고 생각합니다. 당신이 할 수있는 일은 생성 된 객체를 직렬화하고, 사용자가 생성 한 "프로그램"을 표시하기 위해 비 직렬화 및 프로그램에로드 할 수있는 파일에 작성하는 것입니다. 모든 함수가 미리 정의 된 경우 단추 클래스에서 확장 된 새 클래스에 저장된 고유 키를 사용하여 단추에 연결할 함수를 가리킬 수 있습니다. 사용자는 Visible 속성을 모두 false로 설정하고 "Customized"(사용자 정의) 할 수있는 객체 배열을 저장할 수 있습니다. 사용자가 만든 프로그램의 컴파일이 필요한지 또는 직렬화 된 개체를 연결하여 프로그램을 사용자 지정 가능한 프로그램으로 사용하는지 확실하지 않습니다.

프로그램의 목표는 정확히 무엇입니까?

나는 당신의 디자인에 새로운 아이디어를 가져 오는 데 도움이되기를 바랍니다. 더 많은 정보를 제공 할 수 있다면 내가 볼 수있는 몇 가지 예제 코드를 만들 수 있습니다.

+0

아이디어를 주셔서 감사합니다. 프로그램 자체에 대한 자세한 내용을 추가하고 있습니다. –

+0

사용자 코드를 컴파일하여 결과 코드를 다른 PC로 이식 할 수 있으며, 사용자의 디자인을 옵션으로 직렬화 할 수도 있습니다. 따라서 을 여러 설계로 만들 수 있기 때문에 직렬화는 저장/열기에 더 적합합니다. 풍모. –

+0

전체 파일 구조는 어떻습니까? 예를 들어 "Calc"라는 사용자 프로그램의 모든 직렬화 된 객체는 Calc /에 저장됩니다. 직렬화 된 객체가 거기에 저장됩니다. 그러면 두 개 이상의 디자인을 만들 수 있고 서로 겹쳐 쓰지 않고 동일한 공간에 2 개의 "버튼 1"을 존재시킬 수 있습니다. 그러면 프로그램이로드 할 디렉토리 이름이있는 단일 텍스트 파일이 루트에 위치합니다. – Skintkingle