字符串结果成多行文本框

时间:2013-07-19 14:27:34

标签: c# .net windows .net-3.5

我一直试图在我的TextBox中获得多个结果,但我无法做到正确。有人可以告诉我一个将这个数组显示到文本框中的例子吗?

public ArrayList GetUserGroups(string sUserName)
{
    textBox1.Multiline = true;
    ArrayList myItems = new ArrayList();
    UserPrincipal oUserPrincipal = GetUser(sUserName);

    PrincipalSearchResult<Principal> oPrincipalSearchResult = oUserPrincipal.GetGroups();
    textBox1.Multiline = true;
    foreach (Principal oResult in oPrincipalSearchResult)
    {
        myItems.Add(oResult.Name);
        textBox1.Text = oResult.Name.ToString();
    }
    return myItems;
}

8 个答案:

答案 0 :(得分:5)

这一行

textBox1.Text = oResult.Name.ToString();

每次执行时都会覆盖文本框中的文本。您真正想要做的是将每个新字符串附加到文本框中已有的文本中:

textBox1.Text += oResult.Name.ToString() + Environment.NewLine;

此外,如果找到的主体数量相对较大,那么使用StringBuilder可能会让您获得更好的效果:

StringBuilder text = new StringBuilder();
foreach (Principal oResult in oPrincipalSearchResult)
{
    myItems.Add(oResult.Name);
    text.Append(oResult.Name);
    text.AppendLine();
}

textBox1.Text = text.ToString();

答案 1 :(得分:1)

每次循环都会覆盖文本。

使用Lines属性代替Text进行多线模式。 (MSDN

答案 2 :(得分:1)

在您的foreach循环中,您每次都会重置文本。所以它只保留最终循环的值。

尝试执行Andrei提到的内容,或者您​​可以将所有响应附加到字符串/字符串构建器,并将最终文本分配给文本框。

string str;
foreach(...){
  str += oResult.Name.ToString();
} 

textBox1.Text = str;

OR

StringBuilder sb = new StringBuilder();

foreach(...){
  sb.Append(oResult.Name.ToString());
} 

textBox1.Text = sb.ToString();

答案 3 :(得分:1)

您只需重复将文本框的Text属性设置为最后一个oResult.Name

相反,你需要追加它。像

这样的东西
textBox1.Text = textBox1.Text + oResult.Name + Environment.NewLine;

那就是说,如果你要做大量的这些,你可能会考虑使用StringBuilder来提高性能。像这样:

StringBuilder tempText = new StringBuilder();
foreach (Principal oResult in oPrincipalSearchResult)
{
    myItems.Add(oResult.Name);
    tempText.Append(oResult.Name.ToString());
    tempText.Append(Environment.NewLine);
}
textBox1.Text = tempText.ToString();

答案 4 :(得分:1)

我认为你的问题在这里..

textBox1.Text = oResult.Name.toString();

在该foreach中,您将文本框值分配给当前循环项目值。

尝试类似

的内容
textBox1.Text = textBox1.Text + oResult.Name.ToString();

此外,您正在使用该方法执行两项操作,因此您隐藏了在另一种方法中填充文本框的事实。

答案 5 :(得分:1)

这一行:textBox1.Text = oResult.Name.ToString();

如果您要通过收藏中的每位校长,您将用最后一位校长替换该文本。 为简单起见使用串联:textBox1.Text + ='\ n'+ oResult.Name.ToString();

如果您担心资源或性能问题,请使用StringBuilder类。

答案 6 :(得分:0)

public ArrayList GetUserGroups(string sUserName)         {

        ArrayList myItems = new ArrayList();
        UserPrincipal oUserPrincipal = GetUser(sUserName);

        PrincipalSearchResult<Principal> oPrincipalSearchResult = oUserPrincipal.GetGroups();
        StringBuilder text = new StringBuilder();
        foreach (Principal oResult in oPrincipalSearchResult)
        {
            myItems.Add(oResult.Name);
            text.Append(oResult.Name);
            text.AppendLine();
        }
        textBox1.Text = text.ToString();
        return myItems;
    }

答案 7 :(得分:0)

首先不要在程序设计中以编程方式放置多行选择文本框并单击右上角箭头并选择多行,然后将文本框展开到所需的大小,然后在foreach循环内:

    foreach (Principal oResult in oPrincipalSearchResult)
    {
        myItems.Add(oResult.Name);
        textBox1.AppendText(oResult.Name + Environment.NewLine);
    }

如果你只在代码中设置多行,你的文本框只会显示第一行,你必须在旁边放置这样的内容才能查看结果textBox1.ScrollBars = ScrollBars.Vertical;,这样就可以使文本框像一个数字下拉控件(因为你没有在设计器中选择多行,文本框只是第一行),这没有意义,所以在你的情况下更好的是在设计器中选择多行并首先调整控件的大小。