C 為RichTextBox控制項新增行號

2021-06-18 10:15:30 字數 2667 閱讀 3391

寫過程式的人應該不會對richtextbox感到陌生,與textbox相比,它封裝了更豐富的物件,使你的程式使用起來更加方便。但是它也有美中不足的地方。比如說沒有行號,滾動條滾動進度無法控制等一系列的問題。

今天,就據我所熟悉的,向大家介紹介紹.希望達到拋磚引玉的效果,有不足的地方,還請大家積極指出來!

首先介紹如何為自己的richtextbox增加行號。

新建乙個使用者控制項類(usercontrol),取名叫「adascrollrichtextbox 」繼承自「system.windows.forms.richtextbox 」。我們要給這個richtextbox類加上行號,有乙個比較巧妙的辦法。那就是在這個類裡再加上乙個richtextbox類。如下面這個方法:

private richtextbox   _lineid;

private void initializelineid()

在adascrollrichtextbox 的建構函式裡呼叫這個方法,就可以實現行號了。

這樣,當你在為adascrollrichtextbox 賦值的時候,便會自動為你新增行號。值得注意的是,前面我們提了,richtextbox的scrollbar有問題,不能控制滾動條的滾動進度。所以,程式寫到目前,在效果上還是有些問題的。細心的人就會發現,當拉動滾動條的時候,行號不能跟隨著滾動條的滾動一起滾動,更加不要提滑鼠的滾輪了!

我們新建乙個類,他繼承自richtextbox,取名「adalineidtxt 」。

我們知道windows事件處理都是訊息機制,你觸動鍵盤、拖動滑鼠、拖動滾動條,都會觸發訊息。拖動滾動條?訊息?對,拖動滾動條的訊息就是「message.msg」裡的「wm_hscroll = 0x0114」和「wm_vscroll = 0x0115」。只要我們捕獲到這兩個訊息,就可以控制拖動滾動條的滾動了。

首先,我們定義乙個委託

public delegate void sendmessage(message pomsg);

光有委託不行,我們還得定義乙個事件

public event sendmessage sendmessageevent;

以上做好之後,我們還需要過載wndproc方法。

protected override void wndproc(ref message m)

}base.wndproc(ref m);

}//如果拖動滾動條是垂直方向(因為這裡只讓行號滾動,所以只有垂直方向),就觸發訊息。

定義乙個滾動方法。

public void scroll(message pomsg)

}這樣,我們的行號隨滾動條滾動的功能就基本上實現了。下面是完整**:

using system;

using system.collections.generic;

using system.componentmodel;

using system.drawing;

using system.data;

using system.text;

using system.windows.forms;

namespace adaeniac

protected override void wndproc(ref message m)

}base.wndproc(ref m);

}public void scroll(message pomsg)}}

}需要說明的是,我前天寫的「richtextbox知識--為richtextbox新增行號」需要做部分修改。將「_lineid」換成「adalineidtxt 」 型別。然後,還需要在「adascrollrichtextbox 」裡增加乙個方法

public void lineidscroll(message pomsg)

}在你使用該控制項「adascrollrichtextbox 」的時候,需要呼叫其「sendmessageevent」事件。在該事件裡,可以讓行號隨滾動條滾動起來。

如例private void txtview_sendmessageevent(message pomsg)

至此,我們為richtextbox增加的行號已經可以隨滾動條的滾動而滾動了。但是還是存在些問題,什麼問題呢?

那就是滾輪滑動時,行號沒滾動。

在  richtextbox知識(二)裡,我們為richtextbox新增了隨滾動條滾動的行號,但是滾輪滾動的時候,行號卻沒有跟隨滾動!今天我們再讓行號隨滾輪滾動起來.具體**見下:

using system;

using system.collections.generic;

using system.componentmodel;

using system.drawing;

using system.data;

using system.text;

using system.windows.forms;

using system.runtime.interopservices;

我們在保持前一篇擷取滾動條訊息的同時,引用windows api.用它來控制行號跟隨滾輪滾動.

這裡需要重寫"adscrollrichtextbox" 的 onvscroll(eventargs e)方法.有人問,為什麼不連帶重寫onhscroll方法呢?原因很簡單,因為我們的行號只需要操作上下滾動,左右滾動就沒必要了.除非你想玩bt點,讓你的行好忽隱忽現.

至此,我們已經順利的為richtextbox新增上行號了!

為RichTextBox控制項新增上下文選單

c private voidform1 load objectsender,eventargs e private voidmyitem1 click objectsender,eventargs e private voidmyitem2 click objectsender,eventargs ...

RichTextBox控制項的簡單使用

顯示滾動條 scrollbars both 顯示為超連結 1.在form load中 richtextbox1.text 2.在richtextbox的linkclicked事件中 system.diagnostics.process.start e.linktext 修改字型 在form load...

為RichTextBox中的文字新增書籤

1.本文主要實現的功能如下 1.新增書籤 2.刪除書籤 3.定位書籤 2.應用軟體 vs2010 3.實現過程 3.1 首先建立wpf工程,這裡命名為addlabel 3.2 根據功能布局視窗中的內容,這裡要用到兩個視窗 主視窗用來存放richtextbox控制項 子視窗存放實現書籤的控制項 3.3...