【问题标题】:Developing C# Visual Studio .exes similar to Java [duplicate]开发类似于 Java 的 C# Visual Studio .exe [重复]
【发布时间】:2017-10-25 15:41:11
【问题描述】:

我从用 Java 开发到在 Visual Studio 中用 C# 开发。除了一件事之外,我对这种变化感到非常满意:我可以编写隐藏或 GUI 应用程序的方式。

我曾经使用 Swing 在 Java 中开发基于 GUI 的应用程序。

我想做的是使用static void Main(string[] args){} 开发一个控制台应用程序样式的应用程序,但是我希望能够创建窗口并使用类似于jFrameObject.setVisible(bool) 的方法告诉它们可见/打开.我想要的是一个控制台样式的应用程序,我可以在其中使用 WPF 窗口及其组件,并且我希望能够在 Visual Studio 2017 内置的窗口设计器中制作这些窗口。

如果可能的话,如果我也可以选择显示/隐藏控制台,那就太好了。我尝试了几种不同的方法来执行此操作,例如 this,但是显示的控制台未链接到 C# Console 对象,因此将 Console.WriteLine(string); 输出到 Visual Studio 2017 中的调试控制台而不是控制台在窗口中打开。

感谢您提供的任何帮助!

【问题讨论】:

    标签: c# wpf visual-studio-2017 console-application


    【解决方案1】:

    如果您想打开 WPF 窗口(即使在控制台项目中),也没有什么特别之处。

    您可以使用 Visual Studio 实用程序(新建/窗口或类似的东西)简单地添加 WPF 表单。

    要打开你的窗口,你有两种可能:

    第一个是打开一个对话框模式(直到窗体关闭代码才继续)

    MyWindow window = new MyWindow();
    window.ShowModal();
    

    第二种解决方案是打开窗口而不等待对话框关闭(类似于异步)

    MyWindow window = new MyWindow();
    window.Show();
    

    您可以在this article..上找到更多信息。

    享受使用 C# 而不是 Java 进行编程。

    【讨论】:

    • 这似乎工作得几乎完美,但唯一的问题是,当执行window.Show() 并继续执行代码时,打开的窗口会锁定,您无法与之交互。
    • 您是否尝试过在新线程中启动窗口?
    • 我知道它是如何工作的,我确信即使我没有测试它,只要我使用 ShowDialog();但是 Show() 的意义何在?如果它由于继续执行代码而被锁定,是否在线程中?
    【解决方案2】:

    首先,您可以使用 Windows 窗体,它使您能够轻松地将 GUI 元素添加到应用程序中,例如在您的控制台应用程序的 Main() 中:

    var form = new System.Windows.Forms.Form();
    form.Text = "Window Title";
    var button = new System.Windows.Forms.Button();
    button.Text = "OK";
    form.Controls.Add(button);
    form.ShowDialog();
    

    这需要您添加对 [System.Windows.Forms] 程序集的引用。

    至于控制台窗口【问题】:Show/Hide the console window of a C# console application

    如果你想做WPF,添加一个代表某个窗口的类:

    public class SomeWindow : System.Windows.Window
    {
        public SomeWindow()
        {
            this.AddChild(new System.Windows.Controls.Button() { Content = "OK", Height = 30, Width = 100 });
        }
    }
    

    然后使用应用程序对象运行窗口:

    new System.Windows.Application().Run(new SomeWindow());
    

    Main 需要用 [STAThreadAttribute] 标记。需要引用程序集 PresentationCore、PresentationFramework 和 WindowsBase。

    【讨论】:

      【解决方案3】:

      您可以从控制台应用程序开始,然后添加对 WinForms 或 WPF 程序集的引用以打开窗口。

      或者,您可以从 WinForms 或 WPF 应用程序开始,然后使用 Win32 API 打开控制台:How do I create a C# app that decides itself whether to show as a console or windowed app?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-23
        • 1970-01-01
        • 2012-12-31
        • 1970-01-01
        • 2010-10-01
        • 1970-01-01
        • 2021-10-04
        • 1970-01-01
        相关资源
        最近更新 更多