获取TextBox行号

时间:2015-10-21 07:10:10

标签: c# winforms textbox

我想在TextBox winform 应用中获得C#行号。但与this question不同,我想要实际的行号,无论是包裹的行还是\r\n的新行。

var lines = tb.Lines.Count();只会通过回车获取行号。

那我怎样才能得到我想要的东西?

2 个答案:

答案 0 :(得分:3)

所以我找到了答案here

我必须创建我自己的TextBox版本:

using System;
using System.Windows.Forms;

namespace TextBoxLines
{
    public class TextBoxEx : TextBox
    {
        private const int EM_GETLINECOUNT = 0xBA;
        private const int EM_LINEINDEX = 0xBB;
        private const int EM_LINELENGTH = 0xC1;

        public TextBoxEx() :base()
        {
            //Since we'll want multiple lines allowed we'll add that to the constructor
            this.Multiline = true;
            this.ScrollBars = ScrollBars.Vertical;
        }

        public int LineCount
        {
            get
            {
                Message msg = Message.Create(this.Handle, EM_GETLINECOUNT, IntPtr.Zero, IntPtr.Zero);
                base.DefWndProc(ref msg);
                return msg.Result.ToInt32();
            }
        }

        public int LineIndex(int Index)
        {
            Message msg = Message.Create(this.Handle, EM_LINEINDEX, (IntPtr)Index, IntPtr.Zero);
            base.DefWndProc(ref msg);
            return msg.Result.ToInt32();
        }

        public int LineLength(int Index)
        {
            Message msg = Message.Create(this.Handle, EM_LINELENGTH, (IntPtr)Index, IntPtr.Zero);
            base.DefWndProc(ref msg);
            return msg.Result.ToInt32();
        }
    }
}
  

美丽。现在,您已将它们内置到TextBox中。使用它们   就像你使用TextBox的任何属性并获取数字一样   TextBox中显示的行 - 如果它们被包装则无关紧要   线条或实际线条。

答案 1 :(得分:-1)

我不明白您想要什么,但通常您可以使用此代码来计算文本框中的行数:

public int LineNumber()
    {
        int LineNumber;
        LineNumber = textBoxNotePad.Lines.Length;
        return LineNumber;
    }

希望有用