ClickOnce和非活动主窗口

时间:2011-08-10 09:16:26

标签: c# wpf winforms c#-4.0 clickonce

我的应用程序使用ClickOnce技术进行部署。但是当用户开始使用应用程序时我遇到了问题。重现问题的方案如下:

  1. 用户点击应用程序的快捷方式以运行应用程序
  2. 出现ClickOnce的“启动应用程序”对话框以检查更新
  3. “启动应用程序”对话框消失
  4. 出现Splashscreen
  5. 出现主窗口(登录窗口) - 但它不活动也没有焦点
  6. 由于主窗口未激活,因此用户必须先点击它才能开始输入用户名和密码。如何解决此问题,以便主窗口出现后处于活动状态?我尝试过以下代码,但它不起作用:

    protected override void OnInitialized(EventArgs e)
        {
           while (!this.IsFocused) { this.Focus(); WPFWaitForPriority.WaitForPriority(DispatcherPriority.Background); }
           base.OnInitialized(e);
        }
    

8 个答案:

答案 0 :(得分:1)

最有可能的是你将重点放在闪屏上。因此,当它关闭时,任何时候都不再有焦点。关闭表单后,调用要对焦的控件上的“选择方法”(我猜的是用户名文本框)。

Select for Focus

答案 1 :(得分:0)

试试这段代码: 伪代码:

OnShown
this.focus
我的意思是。 使用不同的活动。

答案 2 :(得分:0)

我有一个WPF / ClickOnce应用程序,并没有相同的问题。我没有使用App.xaml的StartupUri,我在App.xaml.cs中手动显示登录窗口,如下所示:

protected override void OnStartup(StartupEventArgs e)
    {
        this.DispatcherUnhandledException += new System.Windows.Threading.DispatcherUnhandledExceptionEventHandler(App_DispatcherUnhandledException);
        this.Exit += new ExitEventHandler(App_Exit);         
        base.OnStartup(e);
        ShowLogin();
    }

    private MainWindow _mainWindow;

    private void ShowLogin()
    {            

        _mainWindow = new MainWindow(delegate()
        {
            //.......
        });

        _mainWindow.Closed += new EventHandler(_mainWindow_Closed);

        this.MainWindow = _mainWindow;
        this.MainWindow.Show();            
    }

答案 3 :(得分:0)

根据我的理解,您可以在构造函数内部以编程方式触发click事件。

答案 4 :(得分:0)

关闭启动画面并显示LoginForm后,LoginForm.Activate()怎么样?

答案 5 :(得分:0)

也许尝试将焦点放在该表单上的TextBox上。登录名称例如。

我认为OnInitialized事件可能为时尚早。 OnShown应该是好的。

答案 6 :(得分:0)

您使用的是Visual Studio吗?我知道如果你转到项目选项卡下的表单属性,你可以指定启动对象。也许您可以指定主表单,并且可以在其前面加载启动画面。

答案 7 :(得分:0)

你试过了吗?

protected override void OnInitialized(EventArgs e)
{
   while (this.CanFocus) { this.Focus(); WPFWaitForPriority.WaitForPriority(DispatcherPriority.Background); }
   base.OnInitialized(e);
}