【问题标题】:C# Input and Output in the same RichTextBox Control同一个 RichTextBox 控件中的 C# 输入和输出
【发布时间】:2016-05-16 21:23:38
【问题描述】:

我正在尝试寻找有关如何在富文本框中重新创建控制台的想法。 我发现的第一个想法是重定向同时运行的不可见控制台应用程序的输出。 二、使用两个文本框,一个用于输出,一个用于输入。

我遇到的问题是我不知道我应该订阅哪个事件。是的,我整天都在互联网上寻找这个,但我发现最接近的是有人在 VB 中做这件事。所以我的问题:

  1. 有没有与我列出的想法不同的想法?
  2. 是否可以只有一个 rTextBox 用于输入和输出?
  3. 如果重定向是最好的解决方案,谁能解释一下我是如何设置重定向的;我创建了一个单独的文件 (poker.cs),它被设置为通过控制台运行。如果您在这里查看最佳答案: Redirect console output to textbox in separate program 他有两个功能,但我不知道如何设置我的richTextBox 和运行.cs 文件;也可能是我使用了错误的事件。我一直在从负载运行它。

我绝对希望richTextBox 像控制台一样运行。我知道这是可以做到的。我愿意相信。

【问题讨论】:

  • 忘记控制台,如果您搜索“控制台”,您将以控制台程序结尾,而不是表单程序,挂钩到第二个文本框的 KeyPress 事件,如果是返回键,则取值为文本并将其添加到文本框,仅此而已
  • 你为什么这么生气古斯曼?我不知道你在说什么。
  • 嗯,对不起,如果它看起来很生气,除了它,这是一个真正的建议,我只是明确的,因为它是一个评论,不要误会! :D
  • 让我在条件中添加一个答案;)
  • 好的,谢谢,这对我来说是 GUI 的第二天,我在 C++ 中工作了很多,所以除非我看到代码,否则很多这些概念在我身上都丢失了。感谢古斯曼的帮助

标签: c# winforms console io-redirection


【解决方案1】:

不要搜索“控制台”一词,否则它会引导您找到错误的帖子,它会导致控制台程序而不是您正在创建的表单程序。

将输入从一个文本框重定向到另一个文本框非常容易,首先挂钩到第二个文本框的 KeyUp 事件,即用户输入的那个文本框。

在那里您可以检查按下的键是否返回,在这种情况下选择文本框的文本,将其附加到第一个文本框的文本并清除第二个文本框的文本,如下所示:

    private void inputTextBox_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Return)
        {

            consoleRichBox.Text += inputTextBox.Text + "\r\n";
            inputTextBox.Text = "";
            e.Handled = true;

        }
    }

【讨论】:

  • 如果你想让它看起来像一个控制台,将两个框一个接一个地放置并将BorderStyle更改为None,然后如果你想添加边框,你可以将它们添加到Panel中
  • 这是很棒的古斯曼,让我玩一下看看我能做什么。
  • 古斯曼,我的大脑工作不正常。我从 Form1_Load() 调用我的 .cs 文件(这是一个控制台扑克游戏);该程序需要用户输入多个字符串和整数。我可以将用户输入传递给公共变量,但我很困惑我应该如何多次使用它。
【解决方案2】:

这会为您提供 cammand 提示的输出:

using System.Diagnostics;
private static string CaptureCommandPromptOutput(string command, string argument)
{
    ProcessStartInfo info = new ProcessStartInfo(command, argument);
    info.RedirectStandardOutput = true;
    info.UseShellExecute = false;
    info.CreateNoWindow = true;
    Process p = new Process();
    p.StartInfo = info;
    p.Start();
    return p.StandardOutput.ReadToEnd();
}  

并像这样使用它:

richTextBox1.Text = CaptureCommandPromptOutput("cmd", "dir C:\");

【讨论】:

  • 非常感谢,我想我也许可以使用它,但我想在内部运行程序而不是调用 exe。但多亏了你,我现在明白了重定向最终是如何工作的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多