首页 > 解决方案 > 控制台停止脚本的其余部分运行

问题描述

所以我有 2 个表单和一个控制台,控制台是通过第二种形式的函数启动的,称为 Start()

    public void Start()
        {
            Console.Title = "RPG";
            strength.Visible = true;
            dexterity.Visible = true;
            constitution.Visible = true;
            intelligence.Visible = true;
            wisdom.Visible = true;
            charisma.Visible = true;
            Console.Clear();
            string race;
            Console.WriteLine("Welcome!");
            Console.WriteLine("Please press 'Enter' to continue.");
            Console.ReadLine();
            Console.WriteLine("This is a world divided by Race, War and Gods...");
            Console.WriteLine("Since the days of old, conflict was common and War was eternal");
            Console.WriteLine("Please press 'Enter' to continue.");
            Console.ReadLine();
            Console.WriteLine("What race do you wish to be?");
            Console.WriteLine("_____________________________");
            Console.WriteLine("(1) Human \n(2) Elf \n(3) Dwarf");
            Console.WriteLine("_____________________________");
            Console.WriteLine("(4) Faun \n(5) Orc \n(6) Aswang \n");
            Console.Write("Choice: ");
            race = Console.ReadLine().ToLower();
            switch (race)
            {
                case "1":
                case "human":
                    Console.WriteLine("\nHumans are native to the rolling hills of Interit");
                    Console.WriteLine("Please press 'Enter' to continue.");
                    Console.ReadLine();
                    First();
                    break;

                case "2":
                case "elf":
                    Console.WriteLine("\nElves are native to the forests of Abrines");
                    Console.WriteLine("Please press 'Enter' to continue.");
                    Console.ReadLine();
                    First();
                    break;

                case "3":
                case "dwarf":
                    Console.WriteLine("\nDwarves are native to the rocky regions of Dunfall");
                    Console.WriteLine("Please press 'Enter' to continue.");
                    Console.ReadLine();
                    First();
                    break;

                case "4":
                case "faun":
                    Console.WriteLine("\nFaun serve in the Ashlands of Ethana");
                    Console.WriteLine("Please press 'Enter' to continue.");
                    Console.ReadLine();
                    First();
                    break;

                case "5":
                case "orc":
                    Console.WriteLine("\nOrcs serve in the country of Ocrain");
                    Console.WriteLine("Please press 'Enter' to continue.");
                    Console.ReadLine();
                    First();
                    break;

                case "6":
                case "aswang":
                    Console.WriteLine("\nAswang serve in the Weytane Woodlands");
                    Console.WriteLine("Please press 'Enter' to continue.");
                    Console.ReadLine();
                    First();
                    break;

                default:
                    Console.WriteLine("Invalid option!");
                    Console.WriteLine("Please press 'Enter' to continue.");
                    Console.ReadLine();
                    Start();
                    break; 
            }

单击继续按钮时,从第一个表单调用此函数,然后将第一个表单的可见性设置为 false。Main() 函数看起来像这样,并且与 Start() 函数在同一个脚本中。

public void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Form2 form2 = new Form2();
            Form1 form1 = new Form1();
            form2.Hide();
            Application.Run(form1);
        }

我的问题是,一旦调用 Start(),表单就无法关闭、移动、最小化、最大化等,我发现这是因为控制台,但是我在网上找不到任何关于如何运行控制台的信息分开,以免干扰表格。有任何想法吗?

编辑:我应该补充一点,它作为一个控制台应用程序启动,这使得控制台在运行时出现。

标签: c#visual-studio

解决方案


在对您的问题的一些评论中,提到您不应该在同一个应用程序中混合控制台交互和 Windows 窗体(或其他 GUI)交互。这是有原因的,理解这一点很重要。

每个 Windows 程序都有一个循环,它在其中接收输入事件并将它们发送以进行处理。在 Windows 窗体应用程序中,这很明显,因为您编写处理程序来响应输入事件。在控制台应用程序中,事件循环仍然存在,但对您隐藏。当您在控制台读取时,控制台会收集输入事件以组装一个字符串,并在响应“Enter”输入事件时将其返回给您。(请注意,模态表单以与控制台类似的方式接管事件循环)。

要获得一个也有响应式表单的控制台类型的应用程序,您可能需要创建自己的“控制台”类,它是一个带有显示区域和输入区域的 Windows 窗体。这样您就可以让常规的 Windows 事件循环处理所有事情。您将不得不以一种更复杂的方式处理输入:而不是仅仅在程序中的某个点等待 Console.Read,您必须跟踪当使用按 Enter 时您期望的输入类型(或提交按钮,或其他)。


推荐阅读