Отображение нескольких материалов в текстовое поле в зависимости от того, какой параметр был выбран в выпадающем списке - PullRequest
0 голосов
/ 02 ноября 2011

- РЕДАКТИРОВАТЬ -

Стоит отметить. Хотя у меня проблема с другой домашней работой, я вижу, что я могу использовать отдельные объекты в качестве записи (что я, вероятно, должен сделать). Это сделало бы работу над моей последней проблемой намного легче. Это проблема, которая может быть полезна для меня.

Я пытаюсь отобразить данные в текстовое поле, используя цикл foreach. Данные должны отображаться в соответствии с выбором поля со списком. Например, если я хочу отобразить ПК, я должен видеть только имя пользователя и пароль, а если я добавлю другую запись, например, веб-сайт, я должен увидеть предыдущую запись в ее формате и новую запись с полями URL, имя пользователя и пароль. Я попробовал IF-утверждение в своем предыдущем вопросе , но, похоже, не работает должным образом.

            StringBuilder sb = new StringBuilder();
            foreach (AddEntry list in addedEntry)
            {
                sb.AppendLine();
                sb.AppendLine("URL: " + list.URL);
                sb.AppendLine("Software Name: " + list.SoftwareName);
                sb.AppendLine("Serial Code: " + list.SerialCode);
                sb.AppendLine("User Name: " + list.UserName);
                sb.AppendLine("Password: " + list.Password);
                sb.AppendLine();
            }

            mainWindow.ChangeTextBox = sb.ToString();

Привет.

Ответы [ 2 ]

1 голос
/ 02 ноября 2011
StringBuilder sb = new StringBuilder();
foreach (AddEntry list in addedEntry)
{
    sb.AppendLine();
    if (!string.IsNullOrEmpty(list.URL))
    sb.AppendLine("URL: " + list.URL);
    if (!string.IsNullOrEmpty(list.SoftwareName))
    sb.AppendLine("Software Name: " + list.SoftwareName);
    if (!string.IsNullOrEmpty(list.SerialCode))
    sb.AppendLine("Serial Code: " + list.SerialCode);
    if (!string.IsNullOrEmpty(list.UserName))
    sb.AppendLine("User Name: " + list.UserName);
    if (!string.IsNullOrEmpty(list.Password))
    sb.AppendLine("Password: " + list.Password);
    sb.AppendLine();
}

mainWindow.ChangeTextBox = sb.ToString ();

2-й вариант

Добавить следующий метод в класс AddEntry

  public override string ToString() 
  {
    StringBuilder sb = new StringBuilder();
    sb.AppendLine();
    if (!string.IsNullOrEmpty(this.URL))
    sb.AppendLine("URL: " + list.URL);
    if (!string.IsNullOrEmpty(this.SoftwareName))
    sb.AppendLine("Software Name: " + this.SoftwareName);
    if (!string.IsNullOrEmpty(this.SerialCode))
    sb.AppendLine("Serial Code: " + this.SerialCode);
    if (!string.IsNullOrEmpty(this.UserName))
    sb.AppendLine("User Name: " + this.UserName);
    if (!string.IsNullOrEmpty(this.Password))
    sb.AppendLine("Password: " + this.Password);
    sb.AppendLine();
    return sb.ToString();
  }

тогда вы можете показать все добавленные записи, как показано ниже

StringBuilder sb = new StringBuilder();
foreach (AddEntry entry in addedEntry)
{
    sb.Append(entry.ToString());
}

mainWindow.ChangeTextBox = sb.ToString();
1 голос
/ 02 ноября 2011
   StringBuilder sb = new StringBuilder();
    foreach (AddEntry list in addedEntry)
    {
        sb.AppendLine();
        if (!string.IsNullOrEmpty(list.URL))
             sb.AppendLine("URL: " + list.URL);
        if (!string.IsNullOrEmpty(list.SoftwareName))
             sb.AppendLine("Software Name: " + list.SoftwareName);
        if (!string.IsNullOrEmpty(list.SerialCode))
             sb.AppendLine("Serial Code: " + list.SerialCode);
        if (!string.IsNullOrEmpty(list.UserName))
             sb.AppendLine("User Name: " + list.UserName);
        if (!string.IsNullOrEmpty(list.Password))
             sb.AppendLine("Password: " + list.Password);
        sb.AppendLine();
    }

    mainWindow.ChangeTextBox = sb.ToString();

Редактировать: я использовал версию UnhandledException, так как она намного более разборчива, чем мое решение (а условный оператор обычно не одобряется).

Я также хочу отметить, чтоВаш класс AddEntry может быть легче написан с использованием автоматических свойств (при условии, что вы используете .NET 3.0 +).

См .:

namespace Store_Passwords_and_Serial_Codes
{
    class AddEntry
    {
        // Auto properties make this class a lot easier to read.
        public string type { get; set; }
        public string url { get; set; }
        public string softwareName { get; set; }
        public string serialCode { get; set; }
        public string userName { get; set; }
        public string password { get; set; }

        // Non-default constructor.
        public AddEntry(string type, string url, string softwareName, string serialCode, string userName, string password)
        {
            this.type = type;
            this.url = url;
            this.softwareName = softwareName;
            this.serialCode = serialCode;
            this.userName = userName;
            this.password = password;
        }
    }
}

И, наконец, как вы сказали, важно, чтобыВы не сохраняете информацию для одного типа записи, которая будет принадлежать другому (например, вы не должны сохранять URL-адрес в тип записи ПК, поскольку это не имеет смысла).Для всего этого решения, вероятно, было бы лучше использовать более строгие типизированные объекты (например, WebPassword, PCPassword, SoftwareSerialCode и т. Д.).Все они могут наследоваться от базового класса (Entry или что-то в этом роде), чтобы также упростить строгий тип списка.

Например:

class Entry { }

class PCPassword : Entry
{
    string userName { get; set; }
    string password { get; set; }

    public PCPassword(string uName, string pass)
    {
        this.userName = uName;
        this.password = pass;
    }

    public override string ToString()
    {
        StringBuilder sb = new StringBuilder();
        sb.AppendLine();
        sb.AppendLine("User Name: " + this.userName);
        sb.AppendLine("Password: " + this.password);
        sb.AppendLine();
        return sb.ToString();
    }
}

Вы бы тогдасослаться на это в своем коде так:

 private void btnAddEntry_Click(object sender, EventArgs e)
 {
     // Making sure that type is selected.
     if (cmbType.SelectedIndex != -1)
     {
         if (cmbType.SelectedIndex == 0)
         {
             if(textUserName.Text == String.Empty || textPassword.Text == String.Empty)
                    MessageBox.Show("Please fill all the fields!", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
             else
             {
                 addedEntry.Add(new PCPassword(textUserName.Text, textPassword.Text));
                 MessageBox.Show("Entry was successfully added!", "Entry Added!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                 ClearFields();
             }
         }

         // etc, etc

         // Print our items
         StringBuilder sb = new StringBuilder();
         foreach (Entry item in addedEntry)
         {
             sb.Append(item.ToString());
         }

         mainWindow.ChangeTextBox = sb.ToString();
     }
 }

Просто подумал, что я это выброшу;)

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