2012-05-16 33 views
8

này có thể đi qua như vô cùng ngu ngốc, nhưng tôi không thể tìm ra nếu:C khối # Trình duyệt web kiểm soát của cha mẹ tải sự kiện

  • Tôi là một thằng ngốc
  • tôi đã hiểu lầm gì đó
  • Trình duyệt MS Web kiểm soát bị lỗi

Tôi thích nghĩ rằng đó là thứ hai.

Tôi có một điều khiển Trình duyệt web trong điều khiển người dùng WinForms. Nó đã được thêm vào sự kiểm soát tại thời điểm thiết kế, và theo lý thuyết, trong sự kiện Load của điều khiển nó sẽ điều hướng đến Google.

Có vẻ đơn giản.

Tuy nhiên.

public partial class TVHost : UserControl 
{ 
    public TVHost() 
    { 
     InitializeComponent(); 
    } 

    private void TVHost_Load(object sender, EventArgs e) 
    {  
     webBrowser1.Navigate("http://google.co.uk"); 
    } 
} 

Điều này không hiệu quả. Không có lỗi, chỉ là không có gì. Chèn một điểm ngắt/dòng gỡ lỗi cho tôi thấy rằng sự kiện Load thậm chí không được gọi.

Tôi đã quyết định tại thời điểm này để kiểm tra xem sự kiện tải có đang được đặt chính xác trong tệp Designer.cs hay không.

this.Load += new System.EventHandler(this.TVHost_Load); 

Có vẻ hợp pháp.

Nếu tôi xóa điều khiển trình duyệt web khỏi biểu mẫu, sự kiện tải sẽ kích hoạt.

Tôi không hiểu điều này một chút, làm thế nào để một biện pháp ngăn chặn một phương pháp sử dụng phương pháp này để kích hoạt ngay từ đầu?

Di chuyển trên, tôi thấy điều này: http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvcs/thread/d6e427b2-9cc9-4318-bb05-11363025e3f7/

TL; DR cho liên kết như sau: "Load sẽ không hoạt động nếu bạn có một webbrowser về hình thức mà được thiết lập để Visible = true"

Vì vậy, chắc chắn là địa ngục, nếu tôi thay đổi chế độ hiển thị mặc định của trình duyệt web thành sai, sự kiện tải của điều khiển sẽ kích hoạt. Tôi có thể khắc phục sự cố bằng cách đặt chế độ hiển thị của trình duyệt trong sự kiện tải.

private void TVHost_Load(object sender, EventArgs e) 
{ 
    webBrowser1.Visible = true; 
    webBrowser1.Navigate("http://google.co.uk"); 
} 

Rất lạ.

Trong khi tác vụ "sửa lỗi" này, tôi thấy nó vô cùng khó khăn và tự hỏi liệu có ai có giải thích về hành vi này không?

Thật ngạc nhiên tôi đã tìm thấy lỗi này trong MS Connect, còn sót lại 2005-http://connect.microsoft.com/VisualStudio/feedback/details/116535/when-adding-a-webbrowser-control-to-a-user-control-the-load-will-not-fire#

+0

Kiểm tra điều này http://stackoverflow.com/questions/2220483/usercontrol-load-event-not-fired – V4Vendetta

+0

Đã thử rằng @ V4Vendetta, cũng không hoạt động. Dù sao cũng cảm ơn bạn. – KingCronus

+0

Một chút Googling đã dẫn đến việc tôi tìm thấy nhiều tài liệu tham khảo cho lỗi này, tôi không thấy bất kỳ sửa chữa tốt hơn so với hiện tại của tôi đặt nó để vô hình đầu tiên. * sadface * – KingCronus

Trả lời

3

Từ các cuộc thảo luận trong Connect bug bạn liên quan đến:

Đối với bây giờ, nếu bạn muốn nhận được Load sự kiện để kích hoạt, bạn có thể đặt thuộc tính URL của điều khiển WebBrowser trong lưới thuộc tính. URL có thể là bất kỳ thứ gì bạn muốn, thậm chí khoảng: trống nếu bạn không muốn nó bắt đầu bằng một trang được tải.

Vì vậy, nếu bạn đi vào nhà thiết kế và thiết lập Url tài sản 's WebBrowser vào chuỗi about:blank (mà kể WebBrowser để tải một trang trống), sau đó điều khiển người dùng của bạn nên bắt đầu nhận được sự kiện Load của nó một lần nữa.

+0

Rất cám ơn, về: trống đã làm các trick. – KingCronus

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