【问题标题】:Prevent form loading until user input在用户输入之前阻止表单加载
【发布时间】:2012-11-08 06:52:39
【问题描述】:

因此,管理层决定实施一个想法,允许用户选择程序的语言。在我看来,他们想要的方式是愚蠢的。但是,我无法改变他们的想法。这是它的工作原理。主窗体(frmMain) 将开始加载。在InitializeComponent() 之前,他们希望加载另一个表单(frmLanguage),要求用户选择一种语言。现在,我可以让 frmLanguage 在适当的时间弹出。我的问题是,一旦显示 frmLanguage,如何防止或暂停 frmMain 继续加载?

public FrmMain()
{
    var language = new FrmLanguage();
    language.Show();

    // I need to pause the FrmMain right here

    InitializeComponent();
}

我在想线程可能是做到这一点的方法,但我对它的经验为零,所以我不确定这是否是正确的思路。我不想做Sleep() 或类似的,因为谁知道用户需要多长时间才能输入他们的选择。此外,这将是一次性弹出窗口。我将更改预先存在的 INI 文件中的一行,这样如果他们已经选择了一种语言,就不会弹出该行。感谢您的所有帮助。

【问题讨论】:

  • 在FrmLanguage中加载你的frmMain怎么样?

标签: c# winforms


【解决方案1】:

使用language.ShowDialog();。根据MSDN,它后面的代码直到对话框关闭后才会执行。

【讨论】:

  • 非常感谢。这完全成功了。太傻了,我以前没见过。
【解决方案2】:

将代码放在InitializeComponent 之前有点危险 - 如果您忘记避免尝试触摸表单上的控件,您将遇到NullReferenceExceptions。不过,更新成员字段是可以的。

加载FrmMain的代码能否先加载并执行FrmLanguage,可能在检查INI文件的地方附近?

【讨论】:

    【解决方案3】:

    我不确定这是否可行,所以请告诉我是否对您有帮助。

    在您的 Main() 方法中,您可以加载第一个表单:

    Application.Run(new FrmLanguage());
    

    然后从那个表单收集语言设置,然后像往常一样加载另一个表单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多