C# TextBox 同步滚动 实现行号

本文介绍如何仅使用TextBox控件实现带行号功能,避免循环写行号导致性能问题。通过TextBox的TextChanged、KeyDown、ValueChanged和SizeChanged事件结合Windows API,实现同步滚动、键盘操作、鼠标滚轮滚动、内容选择等行号更新。目前程序限制最大65535字符,作者期待更好的解决方案。
摘要由CSDN通过智能技术生成
    一般的,我们做一个带行号的编辑控件,通常都使用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事件、<

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值