frmDocExplorer.vb
上传用户:szledliu
上传日期:2021-01-29
资源大小:13805k
文件大小:7k
源码类别:

C#编程

开发平台:

C#

  1. '///////////////////////////////////////////////////////////////////////////////////
  2. 'This form is just a simple document explorer and is not meant to be
  3. 'an html editor, you could easily extend this form to make your
  4. 'own built in editor. Allows exploring the loaded document, it's layout and elements.
  5. '/////////////////////////////////////////////////////////////////////////////////////
  6. Public Class frmDocExplorer
  7.     Private WithEvents sDoc As HtmlDocument
  8.     Private oEl As HtmlElement
  9.     Private elID As Integer 'Counter
  10.     Private Sub frmDocExplorer_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
  11.         deWB.Dispose()
  12.         rtbSource.Dispose()
  13.         tvDoc.Dispose()
  14.         pg.Dispose()
  15.     End Sub
  16.     Private Sub frmDocExplorer_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  17.         sDoc = deWB.Document
  18.         deWB.AllowNavigation = False
  19.         rtbSource.Text = deWB.DocumentText
  20.         pg.SelectedObject = sDoc
  21.     End Sub
  22. #Region " Load Doc Outline "
  23.     Private Sub LoadDocumentOutline()
  24.         On Error Resume Next
  25.         tvDoc.Cursor = Cursors.WaitCursor
  26.         tvDoc.BeginUpdate()
  27.         Dim oitm As TreeNode
  28.         Dim oelmt As HtmlElement
  29.         Dim i As Integer
  30.         For Each oelmt In deWB.Document.Body.Children
  31.             If oelmt.Children.Count > 0 Then
  32.                 If IsNothing(oelmt.Id) Then
  33.                     oEl.SetAttribute("ID", "de" & elID)
  34.                 End If
  35.                 oitm = New TreeNode
  36.                 oitm.Text = "<" & oelmt.TagName & ">"
  37.                 oitm.Name = oelmt.Id
  38.                 oitm.Tag = oelmt.Id
  39.                 oitm.ImageIndex = GetIconID(oelmt.TagName)
  40.                 oitm.SelectedImageIndex = GetIconID(oelmt.TagName)
  41.                 GetChildElements(oitm, oelmt)
  42.                 tvDoc.Nodes(0).Nodes(0).Nodes.Add(oitm)
  43.             End If
  44.             elID = elID + 1
  45.         Next
  46.         tvDoc.ExpandAll()
  47.         tvDoc.EndUpdate()
  48.         tvDoc.Cursor = Cursors.Default
  49.     End Sub
  50.     Private Sub GetChildElements(ByVal oNode As TreeNode, ByVal oElement As HtmlElement)
  51.         Dim cl As HtmlElement
  52.         Dim cn As TreeNode
  53.         For Each cl In oElement.Children
  54.             If IsNothing(cl.Id) Then
  55.                 cl.SetAttribute("ID", "de" & elID)
  56.             End If
  57.             cn = New TreeNode
  58.             cn.Text = "<" & cl.TagName & ">"
  59.             cn.Name = cl.Id
  60.             cn.Tag = cl.Id
  61.             cn.ImageIndex = GetIconID(cl.TagName)
  62.             cn.SelectedImageIndex = GetIconID(cl.TagName)
  63.             If cl.Children.Count > 0 Then
  64.                 GetChildElements(cn, cl)
  65.             End If
  66.             oNode.Nodes.Add(cn)
  67.             elID = elID + 1
  68.         Next
  69.     End Sub
  70.     Private Function GetIconID(ByVal strTag As String) As Integer
  71.         'This code needs to be moved to the control
  72.         Select Case strTag
  73.             Case "TABLE"
  74.                 Return 1
  75.             Case "TBODY"
  76.                 Return 1
  77.             Case "A"
  78.                 Return 7
  79.             Case "B"
  80.                 Return 8
  81.             Case "SCRIPT"
  82.                 Return 19
  83.             Case "H1"
  84.                 Return 24
  85.             Case "H2"
  86.                 Return 25
  87.             Case "H3"
  88.                 Return 26
  89.             Case "H4"
  90.                 Return 27
  91.             Case "H5"
  92.                 Return 28
  93.             Case "H6"
  94.                 Return 29
  95.             Case "TR"
  96.                 Return 4
  97.             Case "TD"
  98.                 Return 3
  99.             Case "UL"
  100.                 Return 5
  101.             Case "LI"
  102.                 Return 16
  103.             Case "SELECT"
  104.                 Return 22
  105.             Case "IMG"
  106.                 Return 15
  107.             Case "P"
  108.                 Return 18
  109.             Case "BUTTON"
  110.                 Return 20
  111.             Case "FONT"
  112.                 Return 12
  113.             Case "INPUT"
  114.                 Return 21
  115.             Case "FORM"
  116.                 Return 13
  117.             Case "CENTER"
  118.                 Return 9
  119.             Case Else
  120.                 Return 2
  121.         End Select
  122.     End Function
  123. #End Region
  124.     Private Sub tvDoc_NodeMouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeNodeMouseClickEventArgs) Handles tvDoc.NodeMouseClick
  125.         Select Case e.Node.Tag
  126.             Case "DOC"
  127.                 pg.SelectedObject = deWB.Document
  128.             Case "BODY"
  129.                 pg.SelectedObject = deWB.Document.Body
  130.             Case Else
  131.                 If Not IsNothing(e.Node.Tag) Then
  132.                     Dim tmpEl As HtmlElement = sDoc.GetElementById(e.Node.Tag)
  133.                     pg.SelectedObject = tmpEl
  134.                     TabControl1.SelectedTab = TabControl1.TabPages(1)
  135.                     tmpEl.ScrollIntoView(False)
  136.                 End If
  137.         End Select
  138.     End Sub
  139.     Private Sub deWB_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles deWB.DocumentCompleted
  140.         sDoc = deWB.Document
  141.         deWB.AllowNavigation = False
  142.         LoadDocumentOutline()
  143.         rtbSource.Text = deWB.DocumentText
  144.         pg.SelectedObject = sDoc
  145.     End Sub
  146.     Private Sub sDoc_Click(ByVal sender As Object, ByVal e As System.Windows.Forms.HtmlElementEventArgs) Handles sDoc.Click
  147.         Try
  148.             Dim MousePoint As New Point(e.MousePosition.X, e.MousePosition.Y)
  149.             oEl = sDoc.GetElementFromPoint(MousePoint)
  150.             pg.SelectedObject = oEl
  151.             Dim oNode As TreeNode = FindNode(tvDoc.Nodes(0), oEl.Id)
  152.             If Not IsNothing(oNode) Then
  153.                 tvDoc.SelectedNode = oNode
  154.                 tvDoc.Select()
  155.                 oNode.EnsureVisible()
  156.             End If
  157.         Catch ex As Exception
  158.             'do nothing
  159.         End Try
  160.     End Sub
  161.     Public Function FindNode(ByVal ParentNode As TreeNode, ByVal SearchVal As String) As TreeNode
  162.         Dim tmpNode As TreeNode
  163.         If ParentNode.Tag = SearchVal Then
  164.             Return ParentNode
  165.         Else
  166.             Dim child As TreeNode
  167.             For Each child In ParentNode.Nodes
  168.                 tmpNode = FindNode(child, SearchVal)
  169.                 If Not tmpNode Is Nothing Then
  170.                     Return tmpNode
  171.                 End If
  172.             Next
  173.         End If
  174.         Return Nothing
  175.     End Function
  176.     Private Sub chkEditMode_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkEditMode.CheckedChanged
  177.         Select Case chkEditMode.Checked
  178.             Case True
  179.                 deWB.Document.ExecCommand("EditMode", False, System.DBNull.Value)
  180.             Case False
  181.                 deWB.Document.ExecCommand("BrowseMode", False, System.DBNull.Value)
  182.         End Select
  183.         TabControl1.SelectedTab = TabControl1.TabPages(1)
  184.     End Sub
  185.     Private Sub chkSupress_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkSupress.CheckedChanged
  186.         deWB.ScriptErrorsSuppressed = chkSupress.Checked
  187.     End Sub
  188. End Class