[C#]richtextbox实现行号

来源:互联网 发布:海苔 知乎 编辑:程序博客网 时间:2024/05/16 06:38
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*/
原创粉丝点击