自己的代码仓库源码
写代码写久了就会遇见不少好的代码片段,以前是把cs文件拷贝出来或者存在txt文档里面,然后造成管理困难查找困难的问题造成诸多的不方便。自己闲着没事就捯饬了一个我的“代码仓库”,用来管理和收藏我感觉不错的代码片段。用了一段时间感觉还不错,就在这里给大家分享下。混园子挺久,一直做伸手党,是时候拿点东西出来向大家混个脸熟~~
先上个界面:
程序中的左边是listbox 右边是webbrowser控件。具有基本的增删改查的功能,同时具有对博客园和CSDN文章的检索和抓取的功能,方便收藏代码。本地代码收藏是基于sqlite数据库,实际效果证明对大文本的载入效果还是很不错的!程序自定义了分类和编辑框,对于编辑框,我觉得是这个程序最拿得出手的一个亮点,待会儿详说.....
继续上图:
我们选择一个文章:
我们点下收藏:
收藏的时候就弹出了这个新建条目的编辑框,这个编辑框我弄了好久才整出来的 原理是用webbrowser控件加载kindeditor编辑器 原理是用C#调用webbrowser中的js方法把文档数据塞进去。保存的时候也是这样子取出html文档保存到本地的sqlite数据库中。所以程序中的展示和编辑都是基于webbrowser控件的,抓取的文章可能会调用外部的css或者js啥的。有可能在本地展示的时候就达不到web上展示的效果,所以有时候需要必要的修改后保存。
在编辑窗口选个分类 填一些备注信息 保存后就可以在本地库中检索到了
如图所示:本段博文已经被我收入囊中了
增删改啥的就布截图了 ,基本上都是差不多的操作。下面讲解下关键部分的代码。
目录结构
js文件夹里面放了jquery文件和博客园的common.js文件,是为了复原展示效果。。。
web文件夹里面是放了编辑器和展示与编辑的html文件
show.html 里面是空的,为了让后台向里面填塞展示的数据。
<! doctype html > < html > < head > </ head > < body > < form > </ form > </ body > </ html >
填数据的代码是:
private void LoadContent( string id) { dr_Content = SqlLiteHelper.GetDataRow( out error, " select a.id,title,content,Inserttime,updateTime,b.typeName as type,Remark from content a left join type b on a.type=b.id where a.id= " + id); string content = @" <center><H2> " + dr_Content[ " Title " ].ToString() + " </H2></center> <small><font face=\"Arial, Helvetica\">分类: " + dr_Content[ " Type " ].ToString() + "     录入时间: " + dr_Content[ " InsertTime " ].ToString().Replace( " '' " , " ' " ) + "     编辑时间: " + dr_Content[ " UpdateTime " ].ToString() + " <hr /> " + dr_Content[ " Content " ].ToString(); content += " <br/><br/><br/><br/><hr/> 备注:<br/> " + dr_Content[ " Remark " ].ToString() + " </font><small> " ; wb_Show.Document.Body.InnerHtml = content; }
关键代码是:
wb_Show.Document.Body.InnerHtml= content;
将组织好的html文档填塞到webbrowser控件里面的body里面。
edit.html代码为:
<! doctype html > < html > < head > < meta charset ="utf-8" /> < title > D </ title > < script charset ="utf-8" src ="kindeditor-min.js" ></ script > < script charset ="utf-8" src ="zh_CN.js" ></ script > < script > var editor; KindEditor.ready( function (K) { editor = K.create( ' textarea[name="content"] ' , { allowFileManager : true , fullscreenMode: true }); }); function getHtml() { return editor.html(); }; function setHtml(htmlCode) { editor.html(htmlCode); }; function ClearHtml() { editor.html( '' ); }; </ script > </ head > < body > < form > < textarea name ="content" id ="content_id" style ="visibility:hidden;" > </ textarea > </ form > </ body > </ html >
在这个页面加载了kindeditor编辑器。还定义了三个方法分别是获取文档,填塞文档,清空文档。都是基于kindeditor编辑器的内置函数。
调用webbrowser控件里面的js方法setHtml的代码是
wb_edit.Document.InvokeScript( " setHtml " , new object [] { content });
方法名称和参数数组俩个参数。
读取就更简单:
string content = wb_edit.Document.InvokeScript( " getHtml " ).ToString().Replace( " ' " , " '' " );
使用webbrowser控件有个常见的问题就是js脚本错误弹出框 所以需要加代码屏蔽掉:
this .wb_Show.ScriptErrorsSuppressed = true ;
另外一个问题是点击连接会出现调用系统的IE浏览器打开窗体的情况。可以这样子解决:
private void wb_ShowNet_NewWindow( object sender, CancelEventArgs e) { e.Cancel = true ; string a_html = wb_ShowNet.Document.ActiveElement.OuterHtml; if (a_html.IndexOf( " href " ) > - 1 ) { string url = new Regex( " href=\"[\\d\\D]+?\" " ).Match(a_html).Value.Replace( " href=\" " , "" ).Replace( " \" " , "" ); this .wb_ShowNet.Navigate(url); } }
在NewWindow事件里面监测打开的连接,把原事件取消掉 用正则重新编辑下连接的代码,取得网页链接后再返回给控件打开。
源代码下载地址:
http://www.everbox.com/f/cXhSfUh8npETWbIymF6O2aGRAl
bug啥的肯定有的,欢迎提出意见或者修改代码进行完善。方便的话把修改后的发我一份yesicoo@163.com 不甚感激
附个群号:160046333 欢迎讨论
标签: 代码 , webbrowser , 仓库
作者: Leo_wl
出处: http://www.cnblogs.com/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息