2010-08-25 31 views
5

Tôi có ứng dụng C# Winforms sử dụng lớp HelpProvider. Bất cứ khi nào tôi nhấn F1 để hiển thị trợ giúp, cửa sổ trợ giúp sẽ luôn nằm trên đầu ứng dụng của tôi, tôi không thể đưa giao diện người dùng ứng dụng của mình lên nền trước. Tôi vẫn có thể tương tác với giao diện người dùng của mình, nhưng cửa sổ trợ giúp sẽ vẫn ở trên cùng.Sử dụng lớp HelpProvider để hiển thị trợ giúp, giao diện người dùng luôn ở phía sau cửa sổ trợ giúp

Đây có phải là thiết kế của HelpProvider không? Hay tôi đang thiếu một cái gì đó?

+0

Theo thiết kế, người dùng muốn đọc sự giúp đỡ. –

+1

@Hans Passant, vâng, nhưng nếu người dùng muốn quay trở lại chương trình để làm những gì trợ giúp nói, nhưng không thể vì cửa sổ trợ giúp đang diễn ra? –

+0

Cô ấy sẽ kéo nó ra khỏi con đường hoặc đóng nó. Hãy chắc chắn rằng bạn không ăn quá nhiều không gian màn hình. –

Trả lời

2

Nó thực sự là do thiết kế, và cái gì đó mà tôi đã không nhận ra. Tôi vừa biên soạn lại dự án năm cuối và xác nhận nó. Tôi đã đọc về nó và về cơ bản tập tin trợ giúp được đặt thành TopMost = True mỗi khi biểu mẫu được nhấp. Điều này có nghĩa là ngay cả khi bạn mã hóa biểu mẫu của mình thành TopMost, ngay khi bạn nhấp vào tệp trợ giúp, nó sẽ trở lại trên đầu một lần nữa.

Tôi tin rằng nếu bạn sử dụng quy trình bắt đầu, nó sẽ giải quyết vấn đề khi mất khả năng tùy chỉnh mà nhà cung cấp trợ giúp cung cấp.

private void textBox1_KeyDown(object sender, 
System.Windows.Forms.KeyEventArgs e) 
{ 
    if(e.KeyCode ==Keys.F1) 
    { 
    System.Diagnostics.Process.Start(@"C:\WINDOWS\Help\mspaint.chm"); 
    } 
} 

Hy vọng nó giúp

6

Có một giải pháp cho vấn đề này, một chút bẩn, nhưng nó hoạt động. Vấn đề là cửa sổ trợ giúp được mở bởi HelpProvider luôn nằm trên cùng của điều khiển cửa sổ cha mẹ được xác định bởi cá thể điều khiển trong tham số đầu tiên của Help.ShowHelp. Ngay cả khi bạn chỉ định null ở đó, biểu mẫu đăng ký chính vẫn được sử dụng làm cửa sổ chính. Để tránh điều này, người ta có thể tạo biểu mẫu giả, hình thức này sẽ được sử dụng làm biểu mẫu cha mẹ trợ giúp. Biểu mẫu này sẽ không bao giờ được hiển thị, nhưng vẫn còn, cửa sổ trợ giúp sẽ được "trên đầu" của nó, có hiệu quả là KHÔNG trên đầu trang của tất cả các cửa sổ ứng dụng khác.

public static class AppHelp 
{ 
    private static Form mFrmDummyHost = new Form(); 

    public static void ShowChm() 
    { 
     Help.ShowHelp(mFrmDummyHost, "my_help.chm"); 
    } 
} 

Tất nhiên, tất cả các trường hợp quá tải khác cũng có thể được gọi theo cách này.

Hope this helps những người như tôi, tìm kiếm câu trả lời cho câu hỏi không bao giờ nhận được tuổi;)

+1

Cảm ơn bạn đã đưa ra câu trả lời vẫn cho phép các tính năng Nhạy cảm theo ngữ cảnh của nhà cung cấp trợ giúp. –

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