Приложение Windows Form с использованием Codedom C # - PullRequest
0 голосов
/ 26 мая 2011

Я пытаюсь создать форму заявления для Windows через Codedom. Я нашел отличный пример, показывающий мне, как сделать это для консольного приложения, но я не могу заставить это работать для формы Windows.

Вот что у меня есть:

CodeDomProvider codeProvider = CodeDomProvider.CreateProvider("CSharp");
            string Output = "Out.exe";
            Button ButtonObject = (Button)sender;

            textBox2.Text = "";
            System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
            //Make sure we generate an EXE, not a DLL
            parameters.GenerateExecutable = true;
            parameters.OutputAssembly = Output;
            CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, textBox1.Text);

Textbox1.text Содержит следующее:

Public Class Form1: Form
{

}

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

Ответы [ 2 ]

2 голосов
/ 26 мая 2011

Если вы новичок в CodeDom, я настоятельно рекомендую вам использовать Linq2CodeDom , который позволяет вам писать свой код в выражениях, которые позже будут переведены через CodeDom в код VB или C #. С помощью этой библиотеки вы можете написать что-то вроде этого:

public void Generate() 
{
    var c = new CodeDomGenerator();
    c.AddNamespace("Samples")
     .AddClass("Form1")
     .AddMethod(MemberAttributes.Public | MemberAttributes.Static, ()=>"YourMethodName", Emit.stmt(() => MessageBox.Show("Method Body")));
}
1 голос
/ 26 мая 2011

Предполагая, что вы на самом деле можете создать EXE в данный момент (поскольку в вашей декларации Form1 отсутствуют некоторые операторы using), я бы начал с добавления точки входа, статического метода Main, который создает и отображает новый Form1 экземпляр:

using System;
using System.Windows.Forms;

public class Form1 : Form
{
    public static void Main(string[] args)
    {
        var form1 = new Form1();
        Application.Run(form1);
    }
}

Это должно по крайней мере получить окно, появляющееся при запуске вашего сгенерированного EXE. @soandos также имеет хорошее замечание: вы должны иметь возможность копировать и вставлять из источника, созданного при создании формы в Visual Studio, хотя вы должны помнить, что VS2008 + использует частичные классы, поэтому вам нужно объединить содержимое Form1.cs и Form1.Designer.cs.

...