如何在VB中打开控制台。

3

我目前使用下面图片中所示的设置拥有一个控制台应用程序。然而,现在我希望能够在控制台中打开多个窗体,因此我想知道是否可以以某种方式打开多个窗体或在Windows Forms应用程序中打开控制台

这是项目的设置


你无法在“Windows Forms应用程序”类型中打开控制台。 - SomeNickName
实际上你可以。这需要额外的编程,但是可以完成。 - tinstaafl
@tinstaafl,你能分享一下这个额外的编程内容或者一个解决方案的链接吗?谢谢。 - Tom
4个回答

8

@tinstaafl你能分享一下这个额外的编程内容或者一个解决方案的链接吗?谢谢

以下是一些链接:

控制台和WinForm结合,便于调试

控制台增强

以下是第一个链接的转换版本。您需要一个名为“CheckBox1”的复选框表单:

Imports System.Runtime.InteropServices

Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    End Sub

    Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
        If CheckBox1.Checked Then
            Win32.AllocConsole()
            Console.WriteLine("Done!")
        Else
            Win32.FreeConsole()
        End If
    End Sub
End Class
Public Class Win32
    <DllImport("kernel32.dll")> Public Shared Function AllocConsole() As Boolean

    End Function
    <DllImport("kernel32.dll")> Public Shared Function FreeConsole() As Boolean

    End Function

End Class

每次点击复选框,您都可以显示或隐藏控制台。您可以像任何控制台应用程序一样写入和读取其中的内容。

这些链接很不错,但是否有vb.net的内容?否则我需要转换所有内容,这可能需要一些时间。谢谢。 - Tom
这很棒,而且有效,但是有没有一种方法可以通过使用控制台来检查控制台是否已终止?因为当前如果关闭它会停止我的整个程序。 - Tom
可以做到,但需要更深入地编程Windows32 API。如果您更具体地提到要做什么,可能会有比使用控制台更好的解决方案。 - tinstaafl

1
所以这很酷。在设计师中,只需使用工具箱中的常规控件添加复选框。
然后双击新的“CheckBox1”,这将自动插入此子例程:
Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged

End Sub

然后你所要做的就是添加这段代码:

    If CheckBox1.Checked Then
        Win32.AllocConsole()
        Console.WriteLine("Done!")
    Else
        Win32.FreeConsole()
    End If

当您运行Windows窗体程序并勾选复选框时,它会自动打开窗口,并保持打开状态,直到您取消勾选该复选框。
将此类添加到程序底部:
Public Class Win32 

    <DllImport("kernel32.dll")> Public Shared Function AllocConsole() As Boolean

    End Function
    <DllImport("kernel32.dll")> Public Shared Function FreeConsole() As Boolean

    End Function

End Class

请确保在顶部添加Imports语句。
Imports System.Runtime.InteropServices

1
表单和控制台应用程序非常不同。总的来说,一个进程要么是表单应用程序,要么是控制台应用程序。表单应用程序使用消息泵实现,而控制台应用程序则是命令行驱动的。在一定程度上可以在控制台中运行表单,反之亦然,但通常不建议这样做。如果您真的需要两者都用到,我强烈鼓励您使用2个进程。
如果您能详细说明您的用例,我们可能能更好地帮助您。

0
如果您想打开一个控制台窗口进行交互,并且当您关闭控制台时,该操作不会终止您的Windows程序,则可以添加以下两行代码:
Dim myProcess As Process
myProcess = Process.Start("cmd.exe")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接