看看能不能这样。
获取 richTextBox 的 ClientSizeHeight 也就是它的高度
分别获取第一行 和 第二行 的第一个字的位置。高度相减。得到字的高度
用 ClientSizeHeight 除以 字的高度 得到 总行数
如果这个数大于 40 则去掉一行(怎么去就不用说鸟。) 。。
不过貌似只能获取得到当前屏的行数。 我只提供一下思路吧
2楼的兄弟,你算列数的方法也太牛逼了吧,那要是文本 有几百万个字符,你那循环要几百万次呀。
最简单的得到行和列的方法:
int totalline = textBox1GetLineFromCharIndex(textBox1TextLength) + 1;//得到总行数。该行数会随着文本框的大小改变而改变;若只认回车符为一行(不考虑排版变化)请用 总行数=textBox1LinesLength;(记事本2是这种方式)
int index = textBox1GetFirstCharIndexOfCurrentLine();//得到当前行第一个字符的索引
int line = textBox1GetLineFromCharIndex(index) + 1;//得到当前行的行号,从0开始,习惯是从1开始,所以+1
int col = textBox1SelectionStart - index + 1;//SelectionStart得到光标所在位置的索引 减去 当前行第一个字符的索引 = 光标所在的列数(从0开始)
我专门开了VS给你写的:
public partial class Form1 : Form
{
private int 总行数;
string[] 字符数组;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
richTextBox1Text = "《少年派的奇幻漂流》被公认是一本很难影像化的小说,重要场景大都发生在海上,几乎全程需要特效,大部分戏都只靠男主角与一头老虎撑场,大量难以形容的、只存在于想象中的幻像,更别提看不见摸不着的“信仰”,李安与他的团队一一实现了。不过,这部**的成就不止于此,《少年派》为滥觞的3D**做出了很好的典范让3D回归到一项普通的拍摄技术,本本分分地为剧情服务,而不仅仅是在银幕上拉出夸张的景深,不仅仅是把“3D特效”当作捞钱的宣传噱头。";
//先看看里面有多少行:
总行数 = richTextBox1GetLineFromCharIndex(richTextBox1TextLength+1)+1;
}
private void button1_Click(object sender, EventArgs e)
{
字符数组 = new string[总行数];//用来保存每一行的字符串。
//获取每行的
for (int i=0;i<总行数-1;i++)
{
字符数组[i] = richTextBox1TextSubstring(richTextBox1GetFirstCharIndexFromLine(i), richTextBox1GetFirstCharIndexFromLine(i + 1) - richTextBox1GetFirstCharIndexFromLine(i));
MessageBoxShow(字符数组[i]);
}
字符数组[总行数 - 1] = richTextBox1TextSubstring(richTextBox1GetFirstCharIndexFromLine(总行数 - 1));
MessageBoxShow(字符数组[总行数 - 1]);
}
}
刚刚亲测可用。
'获得光标位置(按字节计算,起如行和起始列均为0)
Private Function GetCurPos(ptPos As POINTAPI) As Long
Dim nLine As Long, nCol As Long
Call SendMessage(MeText1hwnd, EM_GETSEL, 0, ptPos)
nLine = SendMessage(MeText1hwnd, EM_LINEFROMCHAR, ptPosx, ByVal 0&) '获得行号
nCol = ptPosx - SendMessage(MeText1hwnd, EM_LINEINDEX, -1, 0) '获得列号
GetCurPos = ptPosx '光标位置(按字节计算)
ptPosy = nLine
ptPosx = nCol
End Function
'获得光标位置(按字符计算)
Private Function GetCurPosCh(ptPos As POINTAPI) As Long
Dim nLine As Long, nCol As Long
Dim ByteBuffer() As Byte
SendMessage MeText1hwnd, EM_GETSEL, 0, ptPos
nLine = SendMessage(MeText1hwnd, EM_LINEFROMCHAR, ptPosx, ByVal 0&) '获得行号
nCol = ptPosx - SendMessage(MeText1hwnd, EM_LINEINDEX, -1, 0)
ReDim ByteBuffer(1024)
ByteBuffer(1) = 4
SendMessage MeText1hwnd, EM_GETLINE, nLine, ByteBuffer(0)
ReDim Preserve ByteBuffer(nCol)
nCol = Len(StrConv(ByteBuffer, vbUnicode)) - 1 '获得列号
GetCurPosCh = MeText1SelStart '光标位置(按字符计算)
ptPosy = nLine + 1
ptPosx = nCol + 1
Erase ByteBuffer
End Function
Call GetCurPosCh(ptPos)
GetTextInfo = " 第 " & ptPosy & " 行 , 第 " & ptPosx & " 列"
以上就是关于vb richtextbox 如何保证richtextbox 内固定行数全部的内容,包括:vb richtextbox 如何保证richtextbox 内固定行数、C# textbox怎样获取里面文本有多少行、C# richtextbox等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)