我有一个MemoEdit-Field,当用户插入一个每行字符数比我的MemoEdit-field多的文本时,组件的行为会出现问题。一旦达到一行的最大长度,组件就会中断该行并继续下一行。
然而,这些换行符只是“视觉的”,这意味着不会在每个换行符中添加任何类型的换行符。由于这些缺失的换行符,即使格式正确的文本在保存后也会被打乱排序,因为格式化它们的用户无法看到是否有回车换行符或只有一个“视觉”换行符。有没有一种方法可以根据Memo编辑字段的大小来确定字符串中将出现换行的确切索引?特别是当我尝试考虑单个字符间距时,似乎很难找到一种通用的方法。
发布于 2017-03-07 16:00:14
到目前为止,最简单的解决方案是禁用换行。您可以通过设置memoEdit.Properties.WordWrap = false来实现此目的。这将导致编辑器向右流动,而不是进行视觉换行。这样你的用户就可以在需要的时候添加换行符。
获取文本应该被分隔处的索引似乎很困难。我想出了这样的东西:
private void memoEdit1_TextChanged(object sender, EventArgs e)
{
using (Graphics gr = Graphics.FromHwnd(IntPtr.Zero))
{
//Get the actual line
string text = memoEdit1.Lines[memoEdit1.Lines.Length - 1];
//Calculate the size of the string
SizeF size = gr.MeasureString(text, memoEdit1.Font);
//Check if the string is as big as the memoedit
//Notice the 50 which is constant for the width of the vertical scrollbar
//so far you use one. You may need to fit this to your needs.
if (size.Width >= memoEdit1.Size.Width - 50)
{
int index = memoEdit1.Text.Length - 1;
}
}
}这只是一个想法,你可能需要修改它才能在你的项目中正确运行。我不熟悉vb.net,所以这是C#,但应该是可以采用的。
希望这能对你有所帮助。
https://stackoverflow.com/questions/42627569
复制相似问题