2011-08-10 10 views
9

Ứng dụng của tôi sử dụng công nghệ ClickOnce để triển khai. Tuy nhiên tôi gặp sự cố khi người dùng bắt đầu sử dụng ứng dụng. Các kịch bản để tái tạo vấn đề là như sau:ClickOnce và cửa sổ chính không hoạt động

  1. tài nhấp chuột vào shortcut của ứng dụng để chạy các ứng dụng
  2. "Ra mắt ứng dụng" hộp thoại ClickOnce xuất hiện để kiểm tra cập nhật
  3. "Ra mắt ứng dụng "hộp thoại biến mất
  4. Splashscreen xuất hiện
  5. cửa sổ chính (cửa sổ đăng nhập) xuất hiện - tuy nhiên nó không phải là hoạt động cũng không có sự tập trung

Vì cửa sổ chính không hoạt động, người dùng phải bấm vào nó trước khi họ có thể bắt đầu nhập tên người dùng và mật khẩu. Làm thế nào tôi có thể giải quyết vấn đề này để cửa sổ chính đang hoạt động sau khi nó xuất hiện? Tôi đã thử đoạn mã sau nhưng nó không làm việc:

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

Tôi đã có cùng một vấn đề chính xác điều này với một trong những ứng dụng của tôi. Tôi đã thử mọi phương tiện có thể làm cho nó trở thành cửa sổ tập trung khi khởi động nhưng không có gì có hiệu quả. Tôi không tin rằng đây là một vấn đề ClickOnce nhưng tôi chưa bao giờ tìm thấy giải pháp. Tôi đang thêm nhiên liệu vào lửa. Tôi đang đưa ra +1 vì đây là vấn đề tôi đã thấy nhưng chưa bao giờ có thể giải quyết được. – RLH

+0

Cảm ơn RLH. Hy vọng rằng ai đó sẽ đưa ra giải pháp. –

+0

Tôi có một ứng dụng ClickOnce WinForms có khởi động chính xác như bạn mô tả, và tôi chưa gặp phải vấn đề bạn mô tả. Có lẽ nó là nhiều hơn một vấn đề WPF? –

Trả lời

0

thử mã này: Pseudo code:

OnShown 
this.focus 

tôi có ý nghĩa. Sử dụng sự kiện khác.

+0

Tôi đã thử nó. Thật không may, không thành công –

0

Tôi có một ứng dụng WPF/ClickOnce và không có cùng một vấn đề. Tôi không sử dụng StartupUri của App.xaml, tôi tự hiển thị cửa sổ đăng nhập thay vì như sau trong 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();    
    } 
1

Nhiều khả năng bạn đang đem lại tập trung vào màn hình giật gân. Vì vậy, khi nó đóng cửa không có gì đã tập trung nữa. Sau khi đóng biểu mẫu, hãy gọi Phương thức Chọn trên điều khiển bạn muốn có tiêu điểm (hộp văn bản tên người dùng tôi đoán).

Select for Focus

0

Theo hiểu biết của tôi bạn programatically có thể kích hoạt sự kiện bấm một lần bên trong constructor.

0

Làm thế nào về LoginForm.Activate() sau khi màn hình splash được đóng và LoginForm được hiển thị?

0

Có thể cố gắng tập trung vào TextBox trên biểu mẫu đó. Tên đăng nhập chẳng hạn.

Tôi nghĩ sự kiện OnInitialized có thể quá sớm. OnShown sẽ tốt.

0

Bạn đang sử dụng Visual Studio? Tôi biết nếu bạn đi đến các thuộc tính biểu mẫu dưới tab dự án, bạn có thể chỉ định đối tượng khởi động. Có lẽ bạn có thể chỉ định biểu mẫu chính của bạn và màn hình splash có thể tải ở phía trước nó.

0

bạn đã thử:

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