Нежелательный вывод из цикла foreach и оператора IF - PullRequest
0 голосов
/ 02 ноября 2011

У меня проблема с форматированием вывода из цикла foreach. Что я должен сделать для форматирования вывода, как показано ниже кода? В настоящее время я использую следующий код:

            foreach (AddEntry list in addedEntry)
            {
                // Displaying and formating the output in text box in MainWindow. 
                mainWindow.ChangeTextBox += list.Type + Environment.NewLine;
                if (cmbType.SelectedIndex == 1) 
                    mainWindow.ChangeTextBox += "URL: " + list.URL + Environment.NewLine;
                if (cmbType.SelectedIndex == 2) 
                    mainWindow.ChangeTextBox += "Software Name: " + list.SoftwareName + Environment.NewLine;
                if (cmbType.SelectedIndex == 2) 
                    mainWindow.ChangeTextBox += "Serial Code: " + list.SerialCode + Environment.NewLine;
                if (cmbType.SelectedIndex == 0 || cmbType.SelectedIndex == 1) 
                    mainWindow.ChangeTextBox += "User Name: " + list.UserName + Environment.NewLine;
                if (cmbType.SelectedIndex == 0 || cmbType.SelectedIndex == 1) 
                    mainWindow.ChangeTextBox += "Password: " + list.Password + Environment.NewLine;
                mainWindow.ChangeTextBox += Environment.NewLine;
            }  

Первый вывод:

PC Password
User Name: a
Password: b

Затем добавление еще одной записи ...

Второй выход:

PC Password
URL: e // this should not be here
User Name: a
Password: b

Web Site Password
URL: www.
User Name: www
Password: www

Второй вывод должен быть:

PC Password
User Name: a
Password: b

Web Site Password
URL: www.
User Name: www
Password: www

Надеюсь на несколько советов.

Привет.

Ответы [ 2 ]

0 голосов
/ 02 ноября 2011

В каждом цикле вы добавляете больше текста к выводу.Добавьте свои результаты в StringBuilder и затем отобразите его вывод.

StringBuilder sb = new StringBuilder();
sb.Append("your text");
sb.Append("more text");
MainWindow.ChangeTextBox = sb.ToString()

также почему бы не включить ваш код в блок:


if (cmbType.SelectedIndex == 2) 
{
   //string builder recommended instead but....
   mainWindow.ChangeTextBox += "Software Name: " + list.SoftwareName + Environment.NewLine;
   mainWindow.ChangeTextBox += "Serial Code: " + list.SerialCode + Environment.NewLine;
}               


0 голосов
/ 02 ноября 2011

Добавить DisplayType = cmdType.SelectedIndex в AddEntry

Пробовал с помощью String Builder?

StringBuilder sb = new StringBuilder(mainWindow.ChangeTextBox);
foreach (AddEntry list in addedEntry)
{
    sb.AppendLine(list.Type);

    if (list.DisplayType == 1) 
        sb.AppendLine("URL: " + list.URL);

    if (list.DisplayType == 0 || list.DisplayType == 1) {
        sb.AppendLine("User Name: " + list.UserName);
        sb.AppendLine("Password: " + list.Password);
    }

    if (list.DisplayType == 2) {
        sb.AppendLine("Software Name: " + list.SoftwareName);
        sb.AppendLine("Serial Code: " + list.SerialCode);
        sb.AppendLine("Software Name: " + list.SoftwareName);
    }

    sb.AppendLine();
}  

mainWindow.ChangeTextBox = sb.ToString();

Обратите внимание на временную переменную

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...