2013-07-19 3 views
1

Я пытаюсь получить несколько результатов в своем 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; 
} 
+0

Какой у вас текущий выход? или он вообще выводится? – sora0419

+0

Прежде всего, некоторые хорошие практики. Ваш метод называется «GetUserGroups». Сделать это просто получить эти группы будет гораздо лучше, чем использовать его для DisplaySomething. – br1

+0

Тогда, я думаю, нам нужны детали реализации «GetUser» – br1

ответ

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(); 
+0

Hrm. Думаю, мы с тобой очень похожи на одну страницу. Вы просто печатаете быстрее. Dangit. – Tim

1

Вы переписываете текст каждый раз через цикл.

Использовать свойство Lines вместо Text для многострочного режима. (MSDN)

+0

+1 - но также необходимо использовать строку [] вместо ArrayList. – SteveLove

+0

@SteveL - true, если они хотят присвоить 'myItems' свойство' Lines', что неясно из опубликованного кода. – WildCrustacean

1

В вашем цикле foreach вы каждый раз сбрасываете свой текст. Таким образом, он будет поддерживать значение только конечной петли.

Попробуйте сделать то, о чем упомянул Андрей, или вы можете добавить весь ответ строко/строковому конструктору и назначить окончательный текст текстовому полю.

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

textBox1.Text = str; 

ИЛИ

StringBuilder sb = new StringBuilder(); 

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

textBox1.Text = sb.ToString(); 
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(); 
1

Я думаю, что ваш вопрос здесь ..

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

В этом Еогеаспе вы присваиваете значение текстового поля только текущее зацикленное значение деталей.

Try что-то вроде

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

А также, вы делаете 2 вещи в этом методе, так что вы прячете тот факт, что вы Наполнение текстового поля внутри другого метода.

1

Эта строка: textBox1.Text = oResult.Name.ToString();

Если вы собираетесь через каждого Принципала в своей коллекции, вы замените текст последним Принципалом. Используйте конкатенацию для простоты: textBox1.Text + = '\ n' + oResult.Name.Нанизывать();

И используйте класс StringBuilder, если вас беспокоит проблема с ресурсами или производительностью.

0

общественного ArrayList GetUserGroups (строка 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; 
    } 
0

Во-первых, вместо размещения многострочный programmaticly дизайнера выберите текстовое поле и нажмите upperright стрелку и выберите многострочный, а затем расширить текстовое поле до нужного размера, а затем внутри цикл Еогеаспа:

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

Если вы только установить многострочный в коде текстовое поле будет отображать только первую строку сделать вы должны поставить что-то вроде этого ряда, чтобы просмотреть результаты textBox1.ScrollBars = ScrollBars.Vertical;, и это сделает текстовое поле как элемент управления numericupdown (так как вы не выбрали многострочный в дизайнере, текстовое поле будет только первой строкой), и это не имеет смысла, поэтому лучше в вашем случае выбрать многострочный в дизайнере и изменить размер контроль сначала.

Смежные вопросы