如何获取已启用包装的MemoEdit控件中的行数?

时间:2016-05-26 13:50:29

标签: c# devexpress

我有一个带有包装功能的MemoEdit控件。 MemoEdit以这样的方式工作,即用户看到的换行符只是装饰性的,所以如果用户没有按下“输入”键。按键自己,Lines属性将返回1(输入1行)。

我的目标是检索用户看到的行数(包装) 如果可能的话,还可以获得插入化妆品换行符的位置,这样我就可以创建一个包含用户看到的行的字符串列表。

1 个答案:

答案 0 :(得分:0)

1-您可以通过以下方式获得行数:

声明:SendMessageEM_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));
}