• 自己的代码仓库源码


    写代码写久了就会遇见不少好的代码片段,以前是把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  欢迎讨论

     
     
    标签: 代码webbrowser仓库
  • 相关阅读:
    ReactNative--Flexbox布局
    ReactNative--资源,文章,等等
    ReactNative--坑--no bundle URL present
    ReactNative--StyleSheet样式表
    ReactNative--项目创建及结构分析
    ReactNative--ReactNative简介
    10-4路径文字排版 这一节完全不明白
    10-3区域文字排版
    10-2使用字符调板
    10-1使用文字工具
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2519467.html
Copyright © 2020-2023  润新知