一般的,我们做一个带行号的编辑控件,通常都使用RichTextBox。
网络上很多的都是 RichTextBox + Panel 来实现。
为 TextBox 实现带行号功能。在网上查了查,发现例子很少,通常都是考虑两个TextBox。好不容易找到一个,发现它实现的方法太不讲究... 为了让左边的TextBox显示行号,居然用循环内容行数来写行号...
有点郁闷的是,还专门写了两个方法:
//根据行号确定光标索引 GetCurIndex(int curRow);
//定位总行号 GetRNCount(String str)
难道不知TextBox也有 GetPositionFromCharIndex()、GetCharIndexFromPosition() 和Lines.Length 么...
程序一执行,少量行编辑还行,行数一多... 循环写行号,。。。
程序也没办法实现滚动条、鼠标滚动、鼠标选择内容上下移动等来重写行号。
考虑到仅是文本的TextBox 在编辑时不用考虑rtf格式问题,用TextBox实现的带行号控件还是有点可用性,我自己也写了一个 仅用TextBox 实现的带行号功能。当然需要调用Windows API来做。
大致思想是,用两个 TextBox 同步滚动,加上独立的ScrollBar来实现。
主要涉及 内容文本的 TextChanged事件、<