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,如需转载请自行联系原作者