usingSystem;
usingSystem.Collections;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.Net;
usingSystem.Web;
usingSystem.IO;
namespaceIntrospectionHtml
{
publicpartialclassForm1 : Form
{
publicclassTreeNodeHtmlElm : TreeNode
{
//属性节点
publicenumTypeNode
{
Html,
Form,
Link,
Image,
Css
};
publicHtmlElement mHtmlElement;
privateTypeNode type;
publicTypeNode Type
{
get{returntype; }
set{ type = value; }
}
publicTreeNodeHtmlElm(stringelm,TypeNode t)
: base()
{
type = t;
Text = elm;
mHtmlElement = null;
}
publicTreeNodeHtmlElm(HtmlElement elm,stringtxt,TypeNode t)
: base()
{
type = t;
Text = txt;
mHtmlElement = elm;
}
publicTreeNodeHtmlElm(HtmlElement elm,TypeNode t) :base()
{
type = t;
mHtmlElement = elm;
try
{
if(elm.OuterText ==null|| elm.OuterText =="")
{
Text = elm.OuterHtml;
}
else
{
if(elm.OuterText.Length > 100)
{
Text = elm.OuterText.Substring(0, 100);
}
else
{
Text = elm.OuterText;
}
}
}
catch(Exception e)
{
Text = "";
}
}
};
TreeNodeHtmlElm nodeCss = null;
publicForm1()
{
InitializeComponent();
webBrowser2.Navigate("about:blank");
splitContainer1.SplitterDistance = 50;
}
privatevoidFillTree(HtmlElement hElmFather, TreeNodeHtmlElm t,TreeNodeHtmlElm.TypeNode type)
{
foreach(HtmlElement hElminhElmFather.Children)
{
TreeNodeHtmlElm node = newTreeNodeHtmlElm(hElm,type);
t.Nodes.Add((TreeNode)node);
if(hElm.Children.Count > 0)
{
FillTree(hElm, node,type);
}
}
}
privatevoidFillTreeForm(HtmlDocument doc, TreeNodeHtmlElm t)
{
System.Collections.IEnumerator en = doc.Forms.GetEnumerator();
while(en.MoveNext())
{
FillTree((HtmlElement)en.Current,t,TreeNodeHtmlElm.TypeNode.Form);
}
}
privatevoidFillTreeLink(HtmlDocument doc, TreeNodeHtmlElm t)
{
List lstTemp = newList();
foreach(HtmlElement eindoc.Links)
{
stringtextToAdd = e.GetAttribute("href");
//
// On elimine les doublons
//
if(lstTemp.IndexOf(textToAdd) == -1)
{
TreeNodeHtmlElm node = newTreeNodeHtmlElm(e, e.GetAttribute("href"), TreeNodeHtmlElm.TypeNode.Link);
t.Nodes.Add((TreeNode)node);
lstTemp.Add(textToAdd);
}
}
}
privatevoidFillTreeImage(HtmlDocument doc, TreeNodeHtmlElm t)
{
List lstTemp = newList();
foreach(HtmlElement eindoc.Images)
{
stringtextToAdd = e.GetAttribute("src");
//
// On elimine les doublons
//
if(lstTemp.IndexOf(textToAdd) == -1 )
{
TreeNodeHtmlElm node = newTreeNodeHtmlElm(e, textToAdd,TreeNodeHtmlElm.TypeNode.Image);
t.Nodes.Add((TreeNode)node);
lstTemp.Add(textToAdd);
}
}
}
privatevoidFillTreeCss(HtmlDocument doc, TreeNodeHtmlElm t)
{
foreach(HtmlElement eindoc.All)
{
if(e.TagName.ToLower() =="link")
{
if(e.GetAttribute("rel").ToLower() =="stylesheet")
{
TreeNodeHtmlElm node = newTreeNodeHtmlElm(e, e.GetAttribute("href"),TreeNodeHtmlElm.TypeNode.Css);
t.Nodes.Add((TreeNode)node);
}
}
}
}
privatevoidShowInHtmlPreview()
{
TreeNodeHtmlElm tn = (TreeNodeHtmlElm)(treeView1.SelectedNode);
if(tn !=null)
{
try
{
webBrowser2.Document.Body.InnerHtml = "
"+ tn.mHtmlElement.InnerHtml +"";
}
catch(Exception exp)
{
}
}
}
privatevoidSaveTreeNodeHtml(stringfilename)
{
// Mettre ceci dans un objet.
TreeNodeHtmlElm tn = (TreeNodeHtmlElm)(treeView1.SelectedNode);
StreamWriter sw = newStreamWriter(saveFileDialog1.FileName);
sw.WriteLine("\n\r
\n\r");
// Ajouter le CSS dans le code html et recopier aussi le fichier.
// nodeCss
foreach(TreeNode einnodeCss.Nodes)
{
sw.WriteLine("");
}
sw.WriteLine(tn.mHtmlElement.InnerHtml);
sw.WriteLine("");
sw.Close();
sw.Dispose();
}
privatevoidbutton1_Click(objectsender, EventArgs e)
{
webBrowser1.Navigate(textBox1.Text);
webBrowser2.Navigate(textBox1.Text);
splitContainer3.Panel2Collapsed = true;
}
privatevoidtreeView1_AfterSelect(objectsender, TreeViewEventArgs e)
{
splitContainer3.Panel2Collapsed = false;
TreeNodeHtmlElm tn = (TreeNodeHtmlElm)(treeView1.SelectedNode);
propertyGrid1.SelectedObject = tn.mHtmlElement;
ShowInHtmlPreview();
}
privatevoidbuttonColapsePropertyGrid_Click(objectsender, EventArgs e)
{
splitContainer3.Panel2Collapsed = !splitContainer3.Panel2Collapsed;
}
privatevoidsaveToolStripMenuItem_Click(objectsender, EventArgs e)
{
if(treeView1.SelectedNode ==null)
{
return;
}
if(saveFileDialog1.ShowDialog() == DialogResult.OK)
{
SaveTreeNodeHtml(saveFileDialog1.FileName);
}
}
privatevoidshowInHtmlToolStripMenuItem_Click(objectsender, EventArgs e)
{
ShowInHtmlPreview();
}
privatevoidwebBrowser1_DocumentCompleted(objectsender, WebBrowserDocumentCompletedEventArgs e)
{
treeView1.Nodes.Clear();
TreeNodeHtmlElm node = newTreeNodeHtmlElm("body",TreeNodeHtmlElm.TypeNode.Html);
treeView1.Nodes.Add((TreeNode)node);
FillTree(webBrowser1.Document.Body, node,TreeNodeHtmlElm.TypeNode.Html);
TreeNodeHtmlElm nodeForm = newTreeNodeHtmlElm("forms",TreeNodeHtmlElm.TypeNode.Form);
treeView1.Nodes.Add((TreeNode)nodeForm);
FillTreeForm(webBrowser1.Document, nodeForm);
TreeNodeHtmlElm nodeLink = newTreeNodeHtmlElm("Links",TreeNodeHtmlElm.TypeNode.Link);
treeView1.Nodes.Add((TreeNode)nodeLink);
FillTreeLink(webBrowser1.Document, nodeLink);
TreeNodeHtmlElm nodeImg = newTreeNodeHtmlElm("Images",TreeNodeHtmlElm.TypeNode.Image);
treeView1.Nodes.Add((TreeNode)nodeImg);
FillTreeImage(webBrowser1.Document, nodeImg);
nodeCss = newTreeNodeHtmlElm("CSS",TreeNodeHtmlElm.TypeNode.Css);
treeView1.Nodes.Add((TreeNode)nodeCss);
FillTreeCss(webBrowser1.Document, nodeCss);
}
privatevoidtextBox1_Validated(objectsender, EventArgs e)
{
button1_Click(sender, e);
}
privatevoidcontextMenuStrip1_Opening(objectsender, CancelEventArgs e)
{
if(treeView1.SelectedNode ==null)
{
contextMenuStrip1.Enabled = false;
return;
}
contextMenuStrip1.Enabled = true;
switch(((TreeNodeHtmlElm)treeView1.SelectedNode).Type)
{
caseTreeNodeHtmlElm.TypeNode.Html:
break;
caseTreeNodeHtmlElm.TypeNode.Form:
break;
caseTreeNodeHtmlElm.TypeNode.Css:
break;
caseTreeNodeHtmlElm.TypeNode.Image:
break;
caseTreeNodeHtmlElm.TypeNode.Link:
break;
}
}
}
}