代码之家  ›  专栏  ›  技术社区  ›  F.P

WinForms文本框中的换行符

  •  3
  • F.P  · 技术社区  · 14 年前

    当我在程序中显示数据时,我只想显示文本框的第一行,所以我尝试了

    Regex newLine = new Regex("/[\r\n]+/");
    String[] lines = newLine.Split(row[data.textColumn.ColumnName].ToString());
    SomeLabel.Text = lines[0];
    

    但是它会一行接一行地显示我,所以如果用户输入

    a
    b
    c
    

    将显示标签

    abc
    

    我如何才能让它工作,使它只显示第一行?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Community Bayu Bramantya    7 年前
    var data = row[data.textColumn.ColumnName].ToString();
    

    其中一个(都使用unix和windows行分隔符)。第一个是最快的,因为它不会分裂每一行时,你只使用第一个。

    int min = Math.Min(data.IndexOf("\r\n"), data.IndexOf("\n"));
    
    string line;
    
    if (min != -1)
        line = data.Substring(0, min);
    else
        line = data;
    

    var lines = data.Split(new[] { "\r\n", "\n" }, StringSplitOptions.None);
    var line = lines[0];
    

    How can I convert a string with newlines in it to separate lines? )

        2
  •  2
  •   Lasse Espeholt    14 年前

    (我在另一个答案中添加了这一点,因为这个答案相当大,我认为这将使这一思路更加清晰-如果我应该把它作为一个答案,请留下评论)

    我做了一个扩展方法,它经常有它的用途:

    public static IEnumerable<string> Lines(this string data)
    {
        using (var sr = new StringReader(data))
        {
            string line;
    
            while ((line = sr.ReadLine()) != null)
                yield return line;
        }
    }
    

    您可以通过以下方式获得第一行:

    var line = data.Lines().First();
    

    这应该比 .Split 仅使用行的子集时。