防止用户在后台处理时单击表单上的任何内容的最佳方法是啥? [关闭]

Posted

技术标签:

【中文标题】防止用户在后台处理时单击表单上的任何内容的最佳方法是啥? [关闭]【英文标题】:What is the best way to prevent user click anything on the form while processing on background? [closed]防止用户在后台处理时单击表单上的任何内容的最佳方法是什么? [关闭] 【发布时间】:2016-07-12 16:33:42 【问题描述】:

我正在开发一个 Youtube Mp3 转换器。 Mp3 转换需要几秒钟,我希望用户无法单击表单上的任何控件。我已经使用Control.Enabled = false 完成了所有控制,但我认为这种方式不专业,而且看起来也不利于视觉效果。有什么好的方法可以做到吗?

【问题讨论】:

请解释一下:“而且看起来不利于视觉效果”。 Control.Enabled = false 完全符合您的要求,即禁用用户交互。 禁用整个表单,在选取框模式下显示进度条,将光标更改为忙碌。任你选,你的应用程序 ... 或显示模态对话框。 模态对话框会通知用户您正在工作并禁用与表单交互的能力,或者您可以禁用表单并在表单上发布消息。 【参考方案1】:

正如 cmets 所说,您可以使用模态形式:

yourModalForm.ShowDialog();

没有标题栏按钮或根本没有标题栏,转换完成后会自行关闭。

或者您可以按照自己的建议使用Enabled 属性,但不是针对每个控件,您可以一次为整个表单执行此操作:

this.Enabled = false;

请记住,this 是您的表单,如果您在正确的上下文中。

我还建议您更改表单光标,如下所示:

this.Cursor = Cursors.WaitCursor;

当你的工作完成后,你所要做的就是:

this.Enabled = true;
this.Cursor = Cursors.Default;

【讨论】:

以上是关于防止用户在后台处理时单击表单上的任何内容的最佳方法是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

防止重复数据

Laravel 5,单击表单提交按钮时不显示任何内容

处理网络应用程序中会话超时的最佳方法?

在鼠标单击期间防止键盘事件(未释放)

后台防止表单重复提交

Session 防止表单重复提交