以编程方式在WinForm和控制台

时间:2016-12-13 07:59:55

标签: c# winforms visual-studio console-application

我正在学习C#,我有一个名为“Examples”的项目。在这个项目中,我有一些WinForms,我知道如何在我的程序启动时调用一个WinForm或另一个WinForm(我只是更改Application.Run参数以反映我想要加载的Form)。

我想知道的是我能以某种方式以编程方式启动控制台应用程序吗?所以......我有一个Visual Studio在创建项目时创建的Program类(我第一次创建它时是WinForm),如下所示:

[STAThread]
static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new ______ ); //I left ______ because I change the name to the form I want
}

所以我想做的就是评论并做到这一点:

static void Main()
{
    new ConsoleApplication();
}

并运行控制台应用程序。现在它运行在我称为ConsoleApplication的类中,但它实际上并不作为控制台应用程序运行。我的意思是,现在ConsoleApplication看起来像这样:

class ConsoleApplication
{
    public ConsoleApplication()
    {
        Console.ReadLine();
    }
}

但控制台永远不会出现。我是否需要在不同的项目中创建控制台应用程序?我希望有一个项目与我的所有示例(控制台和WinForms),并告诉程序通过更改Main方法启动哪一个。有没有办法做到这一点?

提前谢谢!

2 个答案:

答案 0 :(得分:1)

试试这个。将它添加到WinForm。

using System.Runtime.InteropServices;

private void Form1_Load(object sender, EventArgs e)
{
    AllocConsole();
}

[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool AllocConsole();

答案 1 :(得分:1)

创建一个控制台应用程序,并引用System.Windows.Forms.dll。然后你可以创建一个表格并像这样:

using System;
using System.ComponentModel;

namespace TestCWF
{
  internal class Program
  {
    private static void Main(string[] args)
    {
      var mf = new MainForm();
      mf.ShowDialog();

      Console.ReadKey();
    }
  }
}

我刚刚看到你有一个表单应用程序,想要打开一个控制台。在这种情况下,斯坦的答案可能更合适。