c# - 控制台停止脚本的其余部分运行
问题描述
所以我有 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(),表单就无法关闭、移动、最小化、最大化等,我发现这是因为控制台,但是我在网上找不到任何关于如何运行控制台的信息分开,以免干扰表格。有任何想法吗?
编辑:我应该补充一点,它作为一个控制台应用程序启动,这使得控制台在运行时出现。
解决方案
在对您的问题的一些评论中,提到您不应该在同一个应用程序中混合控制台交互和 Windows 窗体(或其他 GUI)交互。这是有原因的,理解这一点很重要。
每个 Windows 程序都有一个循环,它在其中接收输入事件并将它们发送以进行处理。在 Windows 窗体应用程序中,这很明显,因为您编写处理程序来响应输入事件。在控制台应用程序中,事件循环仍然存在,但对您隐藏。当您在控制台读取时,控制台会收集输入事件以组装一个字符串,并在响应“Enter”输入事件时将其返回给您。(请注意,模态表单以与控制台类似的方式接管事件循环)。
要获得一个也有响应式表单的控制台类型的应用程序,您可能需要创建自己的“控制台”类,它是一个带有显示区域和输入区域的 Windows 窗体。这样您就可以让常规的 Windows 事件循环处理所有事情。您将不得不以一种更复杂的方式处理输入:而不是仅仅在程序中的某个点等待 Console.Read,您必须跟踪当使用按 Enter 时您期望的输入类型(或提交按钮,或其他)。
推荐阅读
- php - WooCommerce:在保存帖子之前更新字段值
- r - 如何解决 rbacon 的 Bacon 函数中的错误?
- r - 将日期格式从 dd.mm.yyyy 更改为 ddmmmyyyy
- python - 如何使用 tkinter 将窗口附加到主窗口?
- node.js - 节点 14,带有 twilio 的 express 和 keycloak-admin 给出 axios 错误 UnhandledPromiseRejectionWarning
- python - Pandas - 从列应用返回多个值
- html - CSS Grid 正在调整 IE11 中输入元素的大小
- c++ - 是否可以将 C 结构作为 C++ 类的成员?
- python - 根据列和值列表获取数据框索引
- pip - python3 - 安装 pip 工具失败