如何使用控制台应用创建Windows窗体?就像我运行控制台应用程序时一样,它会显示一个表单(窗体)。有人可以帮帮我吗?
答案 0 :(得分:0)
首先,您必须了解Windows中的Windows如何工作。每个窗口化程序管理一个称为消息队列的东西。消息是来自系统(和其他应用程序)的信息,发生了某些事情,例如某人按下了某个键或移动了鼠标,这样窗口就可以正确地对该用户操作作出反应。
处理消息(包括将它们分派到正确的窗口)是程序的责任,并且在Windows窗体应用程序中,通过某些内部消息处理循环在Application.Run方法(或其附近的某个地方)完成。但是如果你想在你的控制台应用程序中显示一个窗口,有人必须对这个过程负责,否则窗口将无法正常工作(实际上,它们根本不起作用)。
如果您以模态方式显示一个窗口,它将自动处理发送给它的消息,因此您可以直接从代码中调用myWindow.ShowDialog
,这样可以正常工作 - 但会锁定控制台输入直到窗户关闭。这意味着,您将能够通过Console.WriteLine
将文本发送到控制台,但是您将无法 - 例如 - 在窗口关闭之前通过Console.ReadLine
向用户询问文本。
class Program
{
public static void Main(string[] args)
{
System.Windows.Forms.Form f = new System.Windows.Forms.Form();
f.Click += (o, e) => { Console.WriteLine("Clicked!"); };
f.ShowDialog();
Console.ReadLine();
}
}
// (run, then click on a form to observe result)
另一方面,如果要以非对话方式显示窗口,事情会变得复杂。我想到的最简单的事情是创建Windows窗体应用程序并使用AllocConsole为应用程序创建单独的控制台窗口(例如Blender这样做)。另一种选择是创建两个不同的应用程序 - 控制台和Windows窗体一个,从第一个开始运行第二个并通过某种机制管理它们的通信(命名管道,共享全局内存,Windows消息,TCP / IP等)。
答案 1 :(得分:-1)
没有直接支持否。
你可以做的是有两个独立的应用程序,一个表单和一个控制台。从表单1启动控制台,并在应用程序之间传递数据。如果要将表单设置为控制台应用程序的“内部”,可以使用
http://msdn.microsoft.com/en-us/library/aa984420%28v=vs.71%29.aspx