Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Winforms中包含控制台?_C#_Winforms_Console - Fatal编程技术网

C# 如何在Winforms中包含控制台?

C# 如何在Winforms中包含控制台?,c#,winforms,console,C#,Winforms,Console,我想在Winform中嵌入一个控制台窗口。有什么方法可以做到这一点吗?您需要做的就是调用windows API函数AllocConsloe,然后使用普通的控制台类这里是表单代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using

我想在Winform中嵌入一个控制台窗口。有什么方法可以做到这一点吗?

您需要做的就是调用windows API函数AllocConsloe,然后使用普通的控制台类这里是表单代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace waTest
{
    public partial class Form1 : Form
    {
        [DllImport("Kernel32.dll")]
        static extern Boolean AllocConsole( );

        public Form1( )
        {
            InitializeComponent();
        }

        private void Form1_Load( object sender, EventArgs e )
        {
            if ( !AllocConsole() )
                 MessageBox.Show("Failed");
            Console.WriteLine("test");
            string input = Console.ReadLine();
            MessageBox.Show(input);
        }
    }
}

基本上可以通过以下方式实现:

  • 创建cmd进程
  • 将该进程的父进程设置为窗体(例如,某个面板)
  • 插入事件以在需要时调整大小
  • 当主进程不再需要cmd进程时终止进程
  • 您需要为此直接调用API(需要SetParent和SetWindowPos)。下面是一篇关于如何使用示例的文章:

    哦!!您希望控制台在窗口中。您可以编写自己的和管道输入到标准输出和标准输入。或者,您可以嵌入powershell,但没有烘焙控制10月12日19:49


    @重新运行,怎么回事,它找不到Kernal32.dll?这是一个x86系统。@重新运行,必须是我将其设置为控制台应用程序,而不是winforms应用程序。我假设Form1_Load应该在窗体加载时运行,对吗?如何使其运行?。只需创建一个带有1个表单的winforms应用程序,然后双击该表单,它将为您创建一个表单加载。但是,您可以在任何位置调用allocconsle,因为只有一个控制台可以与进程相关联。哦,您希望在窗口中显示控制台。您可以编写自己的和管道输入到标准输出和标准输入。或者你可以嵌入powershell,但没有内置控件。“我希望在Winform中嵌入一个控制台窗口”-非常清楚。为什么这个答案(唯一一个真正的答案)不在顶部?