【问题标题】:Print data from VB.net into c# windows form将 VB.net 中的数据打印到 c# windows 窗体中
【发布时间】:2017-03-13 12:49:20
【问题描述】:

我有 2 个解决方案的应用程序。一种是用 Visual Basics 制作的,另一种是用 C# 制作的,它是控制台应用程序。

我正在尝试将该程序重新制作成 Windows 窗体应用程序,但是,所有输出都是使用 Console.WriteLine() 命令进行的。我可以很容易地使用richTextBox.AppendText() 获得来自 C# 的输出。

当尝试从 Visual Basic 部分输出时,我不能这样做,因为我知道这是因为它是参考。我能做些什么来解决这个问题?

【问题讨论】:

  • 您可以访问代码吗?您是在制作一个以其他两个应用程序为参考的新应用程序,还是在您的应用程序中将它们作为 exe 启动?
  • 我可以访问代码
  • 您可以在 VB 代码中添加一个事件,然后将所有 Console.WriteLine 调用替换为以文本作为参数引发事件的调用。您可以按照将控制台输出设置为其他内容的建议进行操作。根据代码和您的最终目标,可以采用许多不同的方法。
  • @atilas1,我建议您首先学习如何创建一个基本的 Windows 窗体应用程序,然后从这里尝试根据您自己提到的 2 个应用程序创建应用程序。没有捷径可走,你需要一个基本的了解来完成这个任务,我们可以帮助你的不是一个具体的问题。在这个成就过程中你可能会遇到很多其他的问题,然后你可以提出一个具体的问题。祝你好运!

标签: c# vb.net winforms


【解决方案1】:

您可以像这样在 VisualBasic 部分中执行此操作(它在 C# 中显示,但在 VisualBasic 中非常相似):获取 StringBuilder 并在其中添加所有旧语句,然后将其一次性放入 TextBox

//// Your old code:
//Console.WriteLine("xyz1");
//// Do anything...
//Console.WriteLine("xyz2");
//// Do anything...
//Console.WriteLine("xyz3");
//// Your new code:
StringBuilder sb = new StringBuilder();
sb.AppendLine("xyz1");
//// Do anything...
sb.AppendLine("xyz2");
//// Do anything...
sb.AppendLine("xyz3");
this.textbox1.Multiline = true;
this.textbox1.Text = sb.ToString();

=> 如果您只需要 Console.WriteLine() 消息的结果,此代码将起作用:如果您立即需要消息,您可能需要一个启动屏幕,如下所示:Making a splash screenHow to build splash screen in windows forms application?ProgressBar 或许可以帮助您:How to use WinForms progress bar?

【讨论】:

  • 而不是 List 然后将所有这些组合起来(包括在.Net中通常不推荐做法的字符串上的 +=),这会更好作为 StringBuilder 与致电AppendLine
  • 如果List中有很多元素,那只是性能问题,如果只是少数:没有性能问题。但是好的,我更改了代码,现在是StringBuilder
  • re:您对我之前评论的回复 - 问题不一定是 += 的性能,而是您使用 List 来保存字符串的事实,以便您可以循环它们并当 StringBuilder 是为这些类型的情况设计的时,将它们组合成一个最终的字符串。 2 - 如果 OP 立即需要消息,为什么他们需要启动画面或进度条?如果在它们到达时需要它们,那么这将是引发事件的好地方,然后消费者可以为事件注册一个处理程序,然后在消息生成时使用它们?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多