博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[C#]richtextbox实现行号
阅读量:6291 次
发布时间:2019-06-22

本文共 1928 字,大约阅读时间需要 6 分钟。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
editorControl是一个userControl,其包含两个控件:左侧是一个用来显示行号的RichTextBox(使用label等均可),右侧是一个继承自RichTextBox的componenteditorGrid1。
 
/*实现行号 begin*/
 
(1) 添加事件
        
private 
void 
richTextBoxMain_TextChanged(
object 
sender, EventArgs e)
        
{
            
updateLabelRowIndex();
        
}
 
        
private 
void 
richTextBoxMain_FontChanged(
object 
sender, EventArgs e)
        
{
            
updateLabelRowIndex();
            
richTextBoxMain_VScroll(
null
null
);
        
}
 
        
private 
void 
richTextBoxMain_Resize(
object 
sender, EventArgs e)
        
{
            
richTextBoxMain_VScroll(
null
null
);
        
}
 
        
private 
void 
richTextBoxMain_VScroll(
object 
sender, EventArgs e)
        
{
            
//move location of numberLabel for amount of pixels caused by scrollbar
            
int 
p = richTextBoxMain.GetPositionFromCharIndex(0).Y % (richTextBoxMain.Font.Height + 1);
            
labelRowIndex.Location = 
new 
Point(0,p);
            
updateLabelRowIndex();
        
}
 
(2)更新行号的函数
 
        
private 
void 
updateLabelRowIndex()
        
{
            
//we get index of first visible char and number of first visible line
            
Point pos = 
new 
Point(0,0);
            
int 
firstIndex = 
this
.richTextBoxMain.GetCharIndexFromPosition(pos);
            
int 
firstLine = 
this
.richTextBoxMain.GetLineFromCharIndex(firstIndex);
 
            
//now we get index of last visible char and number of last visible line
            
pos.X += 
this
.richTextBoxMain.ClientRectangle.Width;
            
pos.Y += 
this
.richTextBoxMain.ClientRectangle.Height;
            
int 
lastIndex = 
this
.richTextBoxMain.GetCharIndexFromPosition(pos);
            
int 
lastLine = 
this
.richTextBoxMain.GetLineFromCharIndex(lastIndex);
 
            
//this is point position of last visible char,
            
//we'll use its Y value for calculating numberLabel size
            
pos = 
this
.richTextBoxMain.GetPositionFromCharIndex(lastIndex);
 
            
labelRowIndex.Text = 
""
;
            
for 
(
int 
i = firstLine; i <= lastLine +1 ; i++)
            
{
                
labelRowIndex.Text += i + 1 + 
"\r\n"
;
            
}
        
}    
        
/*end*/
本文转自静默虚空博客园博客,原文链接:http://www.cnblogs.com/jingmoxukong/articles/2118109.html,如需转载请自行联系原作者
你可能感兴趣的文章
java读取excel、txt 文件内容,传到、显示到另一个页面的文本框里面。
查看>>
《从零开始学Swift》学习笔记(Day 51)——扩展构造函数
查看>>
python多线程队列安全
查看>>
[汇编语言学习笔记][第四章第一个程序的编写]
查看>>
android 打开各种文件(setDataAndType)转:
查看>>
补交:最最原始的第一次作业(当时没有选上课,所以不知道)
查看>>
Vue实例初始化的选项配置对象详解
查看>>
PLM产品技术的发展趋势 来源:e-works 作者:清软英泰 党伟升 罗先海 耿坤瑛
查看>>
vue part3.3 小案例ajax (axios) 及页面异步显示
查看>>
浅谈MVC3自定义分页
查看>>
.net中ashx文件有什么用?功能有那些,一般用在什么情况下?
查看>>
select、poll、epoll之间的区别总结[整理]【转】
查看>>
CSS基础知识(上)
查看>>
PHP中常见的面试题2(附答案)
查看>>
26.Azure备份服务器(下)
查看>>
mybatis学习
查看>>
LCD的接口类型详解
查看>>
Spring Boot Unregistering JMX-exposed beans on shutdown
查看>>
poi 导入导出的api说明(大全)
查看>>
Mono for Android 优势与劣势
查看>>