分享一個我自己的代碼倉庫源碼


寫代碼寫久了就會遇見不少好的代碼片段,以前是把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  歡迎討論


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM