分享一个我自己的代码仓库源码

写代码写久了就会遇见不少好的代码片段,以前是把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() + "&nbsp&nbsp&nbsp&nbsp录入时间:" + dr_Content["InsertTime"].ToString().Replace("''", "'") + "&nbsp&nbsp&nbsp&nbsp编辑时间:" + 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  欢迎讨论

posted @ 2012-05-26 15:58  yesicoo  阅读(5654)  评论(41编辑  收藏  举报