已回答 按键使用户返回主菜单

袜子1992

知名会员
已加入
2020年5月20日
留言内容
53
编程经验
Beginner
我目前正在Visual Studio中构建控制台应用程序。如果用户正在添加客户,则他们可能出于任何原因决定要返回。如果用户正在添加客户,我希望他们能够按"Esc"按钮随时返回主菜单。我已经在我的应用程序中实现了它,用户可以从菜单中选择一个数字,但这仅是当他们到达程序中的某个点时。我已经进行了研究,在网上看到的解决方案似乎比需要的复杂得多。
 
Last edited:

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,887
位置
英国
编程经验
10+
您正在使用哪种类型的项目?

Asp.net,Wpf,Winforms,控制台是什么?

到目前为止,您尝试过,研究过或考虑过什么?

打开主题时,您需要向我们提供所有相关的重要信息。不要仅仅假设我们可以拔出一个水晶球,然后神秘地得出您的想法。请记住,我们只知道您所告诉我们的信息。如果您从一开始就明确而准确,那么您将一开始便获得明确直接的答案,我相信这是您想要的。将您的主题放在与您的项目类型相关的适当论坛中也很有帮助。
 

袜子1992

知名会员
已加入
2020年5月20日
留言内容
53
编程经验
Beginner
您正在使用哪种类型的项目?

Asp.net,Wpf,Winforms,控制台是什么?

到目前为止,您尝试过,研究过或考虑过什么?

打开主题时,您需要向我们提供所有相关的重要信息。不要仅仅假设我们可以拔出一个水晶球,然后神秘地得出您的想法。请记住,我们只知道您所告诉我们的信息。如果您从一开始就明确而准确,那么您将一开始便获得明确直接的答案,我相信这是您想要的。将您的主题放在与您的项目类型相关的适当论坛中也很有帮助。
抱歉,我的互联网出现问题。我已经更改了上面的帖子。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,887
位置
英国
编程经验
10+
移至控制台应用程序...
并不意味着显得专横,但是下次,不要更新您的开头主题。正如其他人可能正在引用您的话。而且,当您对其进行编辑时,该报价与最初发布的报价不匹配,并且它们看上去似乎有些疯狂。 :) 因此,下次,只要回复您所做的任何更新即可。
给我一点时间来回顾您更新的主题。
 

袜子1992

知名会员
已加入
2020年5月20日
留言内容
53
编程经验
Beginner
移至控制台应用程序...
并不意味着显得专横,但是下次,不要更新您的开头主题。正如其他人可能正在引用您的话。而且,当您对其进行编辑时,该报价与最初发布的报价不匹配,并且它们看上去似乎有些疯狂。 :) 因此,下次,只要回复您所做的任何更新即可。
给我一点时间来回顾您更新的主题。
该死的,对不起老兄。我将确保以后不再这样做 (y) :)
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,887
位置
英国
编程经验
10+
没问题。 ;)

这样做的坏方法是添加一个while循环以连续运行以检查是否有按键输入,因为这会消耗大量资源。第二种方法更好。
看起来,如果您选择第二种方法,即添加背景工,则可能只需要稍作更改。您熟悉与他们合作吗?
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,887
位置
英国
编程经验
10+

袜子1992

知名会员
已加入
2020年5月20日
留言内容
53
编程经验
Beginner
No problem. ;)

这样做的坏方法是添加一个while循环以连续运行以检查是否有按键输入,因为这会消耗大量资源。第二种方法更好。
看起来,如果您选择第二种方法,即添加背景工,则可能只需要稍作更改。您熟悉与他们合作吗?
我以前从未真正使用过它们,但是它们看起来非常有用。查看链接后,它说您需要创建Windows窗体应用程序?我正在创建的程序是用于大学项目的,它不能是Windows窗体应用程序,只能是控制台应用程序 :困惑:
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,887
位置
英国
编程经验
10+
这是一个入门的粗糙示例,建议您通读后台工作人员及其工作方式。我在上面链接了该文档。我建议制作一个单独的控制台应用程序并将此代码转储到其中。然后通过在每个打开方法的大括号中放置断点来调试它,看看哪个首先被击中,然后逐步执行代码,以便知道如何操作它。如果您需要调试教程,请在我的签名中签名。此代码适用于控制台应用程序。
C#:
        public static void Main(string[] args)
        {
            BackgroundWorker bgWorker = new BackgroundWorker();
            bgWorker.DoWork += BgWorker_DoWork;
            bgWorker.ProgressChanged += BgWorker_ProgressChanged;
            bgWorker.WorkerReportsProgress = true;
            bgWorker.WorkerSupportsCancellation = true;
            bgWorker.RunWorkerCompleted += BgWorker_RunWorkerCompleted;
            bgWorker.ReportProgress(1); /* Use the overload for userState */
            bgWorker.RunWorkerAsync();
            Console.WriteLine("Press ESC key to stop");
            ConsoleKey key = Console.ReadKey().Key;
            if (key == ConsoleKey.Escape)
            {
                //Add logic to check key is ESC key, and send a cancelation request to your worker.
            }
        }

        private static void BgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            /* Your task  to create your patient was completed */
        }

        private static void BgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            /* Checl your progress here e.ProgressPercentage; */
        }

        private static void BgWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            /* Build up your customer here */
            Console.WriteLine("Add a customer name :");
            Console.ReadLine();
        }
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,887
位置
英国
编程经验
10+
我会将此标记为已回答,因为从技术上讲,您会根据需要进行一些细微的调整,这些调整将基于内联注释进行。我不会为您做所有工作,因为这违背了学习的目的,而且我已经给您提供了一个开端和一些可玩之处。但是,如果您还有其他问题,请回覆,我或其他人将会与您联系。希望有帮助!
 
最佳 底部