2008-10-20 36 views
16

Tôi đã cố gắng tìm ra cách lấy văn bản được người dùng chọn trong điều khiển webbrowser của tôi và không có may mắn sau khi tìm kiếm thông qua msdn và các tài nguyên khác, Tôi đã tự hỏi nếu có một cách để thực sự làm điều này. Có lẽ tôi chỉ đơn giản là bỏ lỡ một cái gì đó.Lấy văn bản đã chọn từ điều khiển Webbrowser trong .net (C#)

Tôi đánh giá cao bất kỳ trợ giúp hoặc tài nguyên nào về vấn đề này.

Cảm ơn

Trả lời

43

Bạn cần sử dụng thuộc tính Document.DomDocument của điều khiển WebBrowser và truyền điều này đến giao diện IHtmlDocument2 được cung cấp trong hội đồng interop Microsoft.mshtml. Điều này cho phép bạn truy cập vào DOM đầy đủ như là có sẵn cho Javascript thực sự chạy trong IE.

Để thực hiện việc này, trước tiên bạn cần thêm tham chiếu đến dự án của bạn vào cụm Microsoft.mshtml bình thường tại "C: \ Program Files \ Microsoft.NET \ Primary Interop Assemblies \ Microsoft.mshtml.dll". Có thể có nhiều hơn một, đảm bảo bạn chọn tham chiếu với đường dẫn này.

Sau đó, để có được những lựa chọn văn bản hiện hành, ví dụ:

using mshtml; 

... 

    IHTMLDocument2 htmlDocument = webBrowser1.Document.DomDocument as IHTMLDocument2; 

    IHTMLSelectionObject currentSelection= htmlDocument.selection; 

    if (currentSelection!=null) 
    { 
     IHTMLTxtRange range= currentSelection.createRange() as IHTMLTxtRange; 

     if (range != null) 
     { 
      MessageBox.Show(range.text); 
     } 
    } 

Để biết thêm thông tin về truy cập vào DOM đầy đủ từ một ứng dụng .NET, xem:

+0

Chà, quyền kiểm soát mạnh mẽ hơn tôi nghĩ ! –

+0

Nếu bạn không nhớ phụ thuộc vào IE/mshtml, đây là một cách rất mạnh mẽ và tương đối dễ dàng để thêm giao diện người dùng kiểu web vào ứng dụng dành cho máy tính để bàn của bạn. 2 cách giao tiếp và các sự kiện cũng khá đơn giản, nếu có ai quan tâm hãy cho tôi biết. – Ash

+0

Cảm ơn rất nhiều. Điều này thật đúng với gì mà tôi đã tìm kiếm. Dự án tôi đang làm là sử dụng HTML, đó là lý do tại sao tôi chọn kiểm soát trình duyệt web. Tôi chỉ không thể tìm ra cách để có được văn bản đã chọn. Cũng nhờ các nguồn, họ đã cung cấp thông tin đáng giá mà tôi đã bỏ lỡ. – Cliff

-1

Tôi giả sử bạn có ứng dụng WinForms bao gồm điều khiển mở trang web.

Kiểm tra xem bạn có thể tiêm/chạy JavaScript trong bộ điều khiển trình duyệt web của bạn hay không. Sử dụng JavaScript, bạn sẽ có thể tìm hiểu những gì đã được chọn và trả lại. Nếu không, tôi nghi ngờ điều khiển trình duyệt web có bất kỳ kiến ​​thức về những gì được chọn bên trong nó.

+0

Bạn có thể chạy JavaScript bên trong trình duyệt web và nói chuyện với C#. Ví dụ: xem http://stackoverflow.com/questions/305915/winforms-how-do-i-execute-c-application-code-from-inside-webbrowser-control – MarkJ

0

Và nếu bạn chỉ sử dụng kỹ thuật dưới đây?

// Sao chép văn bản đã chọn vào clipboard

 Clipboard.Clear(); 
     SendKeys.SendWait("^(c)"); 

// Lấy văn bản đã chọn từ clipboard

 string strClip = Clipboard.GetText().Trim(); 
     Clipboard.Clear(); 
1

Chỉ trong trường hợp bất cứ ai quan tâm đến giải pháp mà không đòi hỏi thêm một tham chiếu đến MSHTML .dll:

private string GetSelectedText() 
{ 
    dynamic document = webBrowser.Document.DomDocument; 
    dynamic selection = document.selection; 
    dynamic text = selection.createRange().text; 
    return (string)text; 
} 
Các vấn đề liên quan