2

你能用 Mirosoft Visual Basic 2008 Express Edition 制作一个 MS-DOS 程序吗?我想做一个没有从命令提示符、DOSBOX 或正在使用的任何东西中弹出的窗口。我试图创建一个消息框,但它不会像在 MS-DOS 中那样!我对VB了解不多,但我需要让一切都留在DOSBOX上。以下是不会保留在 CLI 中的模板:

Imports System.Windows.Forms

    Public Class Dialog1

    Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As        System.EventArgs) Handles OK_Button.Click
        Me.DialogResult = System.Windows.Forms.DialogResult.OK
        Me.Close()
    End Sub

    Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click
        Me.DialogResult = System.Windows.Forms.DialogResult.Cancel
        Me.Close()
    End Sub

    Private Sub Dialog1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub
End Class

如果我能得到一个模板,或者只是某种类型的代码,我将不胜感激。

4

5 回答 5

2

在过去 15 年(或更长时间......)中制造的任何 Microsoft 编译器都不会针对 16 位系统(这就是 DOS)。为 DOS 编译的最后一个 VB 版本是 VB 1.0,但祝你好运。

如果你不介意走 C++ 路线,你可以研究 DJGPP。还有可以为 DOS 编译的 Pascal 和汇编编译器。

随意重新考虑你的道路:)

于 2011-06-20T16:31:11.273 回答
1

您是指运行 Windows XP/Vista/7 的现代计算机上的控制台窗口(即带有看起来像 DOS 命令提示符的字符的黑框)还是实际的 DOS,即运行 MS-DOS 5.22 或类似的计算机?

如果你的意思是前者——一个控制台窗口——你所要做的就是在 Visual Basic 中创建你的项目作为一个控制台应用程序。(按下 New Project 后立即选择。)代码中的第一行表明它是一个 Windows 窗体应用程序,旨在创建对话和窗口等。

在 Google/Youtube 上查找“Visual Basic 控制台应用程序”,您应该一切顺利。

于 2011-06-20T20:34:52.207 回答
1

您可以制作一个留在控制台窗口中的 VB.Net 应用程序。

MessageBox您需要做的就是不要调用任何不在控制台窗口内的函数(例如)。

与所有其他 .Net 应用程序一样,它需要 Windows 和正确版本的 .Net Framework 才能运行。

于 2011-06-20T16:30:46.967 回答
1

我知道这是一个老问题,也许此时 OP 谈到的 MS-DOS 盒子现在在博物馆里,但是如果您选择的语言是 Visual Basic,那么我建议您尝试 PowerBasic(仍然可用,商业,可以编译成 16 位代码)或 QBasic(无论如何,它已经在你的 DOS 机器上可用。

对于PowerBasic,最新版本编译为 32 位。但我相信你可以向他们索要旧版本。好处是您可以将单个代码库用于 16 位和 32 位。我使用它已经有一段时间了,但如果我没记错的话,它可以为控制台视图创建对话窗口(即,不是作为消息框弹出,而是在 MS-DOS 控制台中弹出)。

QBasic的情况下,它是一个相当有限的环境并且它被解释,尽管它编译的商业伴侣 QuickBasic 现在可以从几个站点免费下载。此外,似乎存在可以编译为 32 位和 64 位的新版本,这意味着您可以保持(某种)相同的代码库。

我确信还有其他选择,但如果您已经有一些 Visual Basic 经验,这些可能是最简单的。

顺便说一句,正如其他人已经指出的那样,Windows 窗体不能使用或编译成 16 位 MS-DOS。

于 2018-03-16T21:11:15.317 回答
-1

为此添加三个文本框

1) txterror(从命令提示符或 DOS 获取错误)

2) txtresult(从命令提示符或 DOS 获取结果)

3)txtcommand(写DOS命令执行)

在表单加载中编写以下代码

' Set start information.
    Dim start_info As New ProcessStartInfo("cmd")
    start_info.UseShellExecute = False
    start_info.CreateNoWindow = True
    start_info.RedirectStandardOutput = True
    start_info.RedirectStandardError = True
    start_info.RedirectStandardInput = True

    ' Make the process and set its start information.
    Dim proc As New Process()
    proc.StartInfo = start_info

    ' Start the process.
    proc.Start()

    ' Attach to stdout and stderr.
    Dim std_out As StreamReader = proc.StandardOutput()
    Dim SW As System.IO.StreamWriter = proc.StandardInput
    Dim std_err As StreamReader = proc.StandardError()
    SW.WriteLine(txtcommand.Text)
    SW.WriteLine("exit")
    ' Display the results.
    txtresult.Text = std_out.ReadToEnd()

    ' Clean up.
    std_out.Close()
    std_err.Close()
    proc.Close()

在文本框 keydown 事件中编写以下代码(即 txtcommand_KeyDown)

If e.KeyCode = Keys.Enter Then
        txterror.Text = ""
        ' Set start information.
        Dim start_info As New ProcessStartInfo("cmd")
        start_info.UseShellExecute = False
        start_info.CreateNoWindow = True
        start_info.RedirectStandardOutput = True
        start_info.RedirectStandardError = True
        start_info.RedirectStandardInput = True

        ' Make the process and set its start information.
        Dim proc As New Process()
        proc.StartInfo = start_info

        ' Start the process.
        proc.Start()

        ' Attach to stdout and stderr.
        Dim std_out As StreamReader = proc.StandardOutput
        Dim SW As System.IO.StreamWriter = proc.StandardInput
        Dim std_err As StreamReader = proc.StandardError()
        SW.WriteLine(txtcommand.Text)
        SW.WriteLine("exit")

        ' Display the results.
        txtresult.Text = std_out.ReadToEnd()
        txterror.Text = std_err.ReadToEnd()

        std_err.Dispose()
        SW.Close()
        ' Clean up.
        std_out.Close()
        std_err.Close()
        proc.Close()
    End If
于 2012-10-08T11:37:29.013 回答