vb richtextbox 如何保证richtextbox 内固定行数

vb richtextbox 如何保证richtextbox 内固定行数,第1张

看看能不能这样。

获取 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等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9552657.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存