【问题标题】:Focus winform after application.run在 application.run 之后关注 winform
【发布时间】:2021-09-08 15:20:20
【问题描述】:

我在 Visual Studio 的应用程序中有 2 个 winform。第一个是加载屏幕,确保没有连接问题,然后打开第二个 winforms,这将是一个登录表单。我使用这种方法关闭第一个表单并打开第二个:

this.Close();
th = new Thread(opennewform); // [opennewform thread: Application.Run(new Login());]
th.SetApartmentState(ApartmentState.STA);
th.Start();

它工作正常,但是当第二个表单打开时它失去焦点。我尝试将this.Activatethis.BringtoFrontthis.Show 添加到第二种形式,但它不起作用。我需要的是在第一个表单关闭并打开第二个表单之后,第二个表单是“活动”表单,所以它总是会弹出。我还需要使用 close/thread 方法,以便第一个表单真正关闭,而不仅仅是this.hide();,而是实际上留在后台。提前感谢您的帮助。

【问题讨论】:

标签: c# visual-studio winforms focus


【解决方案1】:

您不需要创建新线程。相反,将开始代码更改为这样的内容

[STAThread]
static void Main()
{
    Application.SetHighDpiMode(HighDpiMode.SystemAware);
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    var form1 = new Form1();
    form1.Show();
    Application.Run();
}

即,从Application.Run() 中删除第一个表单,以便在此表单关闭时应用程序不会退出。

然后用

打开第二个表单
Close();
var form2 = new Form2();
form2.Show();

现在,当您关闭任何表单时,应用程序不会自动退出。因此,您必须使用Application.Exit(); 显式退出它,例如在第二种形式的FormClosed事件中。

【讨论】:

    【解决方案2】:

    尝试:

    Form2 f2 = new Form2();
    this.Hide();
    f2.ShowDialog();
    this.Close();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多