2008-10-10 43 views
14

Tôi đang viết Ứng dụng Windows Forms trong C# .NETCửa sổ ứng dụng được gửi sau các cửa sổ khác khi đóng các chủ đề khác nhau (C#)

Khi khởi động, ứng dụng sẽ hiển thị màn hình giật đang chạy trong một chuỗi riêng biệt. Trong khi màn hình giật gân hiển thị, ứng dụng chính đang khởi tạo.

Khi ứng dụng chính đã hoàn tất việc khởi tạo, biểu mẫu chính của ứng dụng được hiển thị và màn hình splash vẫn hiển thị trên đầu.

Mọi thứ cho đến giờ đều như mong đợi.

Sau đó, màn hình Splash bị đóng, làm cho chuỗi đó thoát. Vì lý do nào đó, tại thời điểm đó, các cửa sổ ứng dụng chính được gửi đi sau tất cả các cửa sổ đang mở khác, đặc biệt là cửa sổ Windows Explorer, nơi bạn đã nhấp vào tệp .exe để chạy ứng dụng ngay từ đầu!

Điều gì có thể khiến cửa sổ đột ngột nhảy "phía sau" như thế này?

Trả lời

10

Hãy thử gọi .Kích hoạt() trên cửa sổ chính của bạn khi chuỗi của bạn đóng.

Nó không bao giờ được kích hoạt, và do đó có Z-Order thấp, vì vậy bất cứ điều gì cao hơn sẽ tự nhiên ở trên nó. Tôi đã phải sửa kịch bản chính xác này trong ứng dụng của chúng tôi.

Đừng quên! Bạn có thể cần phải sắp xếp cuộc gọi đến đúng chủ đề bằng cách sử dụng một Invoke()!

1

Tôi cũng đã từng xảy ra điều này. Câu trả lời của Bob là dễ nhất và phù hợp với tôi trong phần lớn các trường hợp. Tuy nhiên, đã có một số lần tôi cần sử dụng vũ lực. Thực hiện việc này thông qua interop như thế này:

[DllImport ("user32.dll")] public extern bool SetForegroundWindow (IntPtr hWnd);

0

Màn hình splash có phải là hộp thoại Modal không?

Tôi đã thấy cửa sổ này 'nhảy' nếu bạn bỏ qua hộp thoại Phương thức hai lần bằng cách đặt cả DialogResult và gọi Ẩn() hoặc đóng().

Mã như thế này:

private void button1_Click(object sender, System.EventArgs e) 
{ 
    this.DialogResult = DialogResult.Abort; 
    this.Hide(); 
} 

Xem this blog entry cho tất cả các trường hợp ...

-2

Bạn có thể sử dụng mã như thế này:

private void button1_Click(object sender, System.EventArgs e) 
{ 
    this.DialogResult = DialogResult.Abort; 
    this.Hide(); 
} 

Cảm ơn tất cả!

+0

Lặp lại đoạn mã của ai đó trong một năm sau khi chúng đã đăng không hữu ích cho người đọc. –

+0

Đặc biệt khi mã được sao chép/dán là ví dụ về mã gây ra sự cố. – damian

Các vấn đề liên quan