我有一个带有包装功能的MemoEdit控件。 MemoEdit以这样的方式工作,即用户看到的换行符只是装饰性的,所以如果用户没有按下“输入”键。按键自己,Lines属性将返回1(输入1行)。
我的目标是检索用户看到的行数(包装) 如果可能的话,还可以获得插入化妆品换行符的位置,这样我就可以创建一个包含用户看到的行的字符串列表。
答案 0 :(得分:0)
1-您可以通过以下方式获得行数:
声明:SendMessage
和EM_LINEFROMCHAR
[System.Runtime.InteropServices.DllImport("User32.DLL")]
public static extern int SendMessage(IntPtr hWnd, UInt32 Msg, Int32 wParam, Int32 lParam);
public const int EM_LINEFROMCHAR = 0xC9;
并获得以下行数:
FieldInfo fi = typeof(DevExpress.XtraEditors.TextEdit).GetField("_maskBox", BindingFlags.Instance | BindingFlags.NonPublic);
DevExpress.XtraEditors.TextBoxMaskBox textBox = (DevExpress.XtraEditors.TextBoxMaskBox)fi.GetValue(memoEdit1);
int linecount = SendMessage(textBox.Handle, EM_LINEFROMCHAR, textBox.MaskBoxText.Length-1, 0)+1;
2-您可以创建包含MemoEdit行的字符串列表,如下所示:
FieldInfo fi = typeof(DevExpress.XtraEditors.TextEdit).GetField("_maskBox", BindingFlags.Instance | BindingFlags.NonPublic);
DevExpress.XtraEditors.TextBoxMaskBox textBox = (DevExpress.XtraEditors.TextBoxMaskBox)fi.GetValue(memoEdit1);
var lines = new List<string>();
for (int line = 0; ; line++)
{
var start = textBox.GetFirstCharIndexFromLine(line);
if (start < 0) break;
var end = textBox.GetFirstCharIndexFromLine(line + 1);
if (end == -1 || start == end) end = textBox.MaskBoxText.Length;
lines.Add(textBox.MaskBoxText.Substring(start, end - start));
}