【问题标题】:C# Override Console.Read() for a Windows Forms appWindows 窗体应用程序的 C# 覆盖 Console.Read()
【发布时间】:2017-05-05 13:26:46
【问题描述】:

我有以下问题:

我正在制作一个 Windows 窗体应用程序,并且必须使用其他包含 Console.Read() 或 Console.ReadLine() 的 .cs 文件。不应更改文件。 我现在想重写这些函数,以便使用按钮或 Textbox + Button 而不是 Console.Read()。

由于我不应该更改 .cs 文件,因此这似乎不太简单。 有什么想法或线索吗?

【问题讨论】:

  • 检查一下,但不能 100% 确定该方法是否可以与静态类一起使用:stackoverflow.com/questions/7299097/…
  • @Gusman 遗憾的是,这不是我想要的,或者幸运的是?我需要更多的东西,将 Console.Read() 替换为“等到点击返回”片段。
  • 嗯,这个例子展示了如何替换现有类的函数,所以你可以用你自己的替换 Read() 函数,但同样,不确定它是否适用于像控制台这样的静态类.

标签: c# overriding console.readkey


【解决方案1】:

您可以使用以下命令以流的形式访问Console

var stdIn = Console.OpenStandardInput();

那么当你点击按钮的时候,就可以调用

stdIn.Write(Encoding.ASCII.ToBytes(txtMyBuffer.Text), 0, txtMyBuffer.Text.Length);

来自参考: https://msdn.microsoft.com/en-us/library/system.console.openstandardinput(v=vs.110).aspx

【讨论】:

  • 首先,感谢您的快速答复。问题是,Console.Read() 不会被 snipplet 覆盖或重定向。在 .cs 文件的某个地方会弹出 Console.Read()。现在我必须通过从字符串中单击按钮来“满足”Console.Read()(可以来自文本框,但这要简单得多!)
  • 弹出控制台窗口?
  • 不,唯一的就是表单本身
  • 然后,当您编写 stdIn 流时,您的代码应该在 Console.Read() 中读取它。这是同一个流。
  • 但是在我到达按钮之前,我得到一个异常:(“当任何一个应用程序没有控制台或控制台输入已从文件重定向时,无法读取密钥。”)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多