Member 10410972 Ответов: 3

Добавить элементы из textbox1-form2 и textbox2 - form2 в listbox1-form1? С#


This code below works well thanks to you.
Please for just one more question.
I would like to add items from Form2 to listBox1 - Form1.
Form2 has textBox1 and textBox2 and button1.
On Form1 I have listBox1
I want to use this code below in this manner described above. Thanks.


foreach (var item in textBox2.Lines.Select(l => textBox1.Text + " " + l).ToArray())
            {
                if (!listBox.Items.Contains(item))
                    listBox1.Items.Add(item);
            }


Что я уже пробовал:

что-то вроде:
Форма 1:

частный недействительными обработчика button1_click(объект отправителя, EventArgs в электронной)
{
Формы Form2 Ф2 = новые формы Form2();
f2. владелец = это;
Ф2.Метод showdialog();
}

public void AddListItem(текст объекта)
{
список listbox1.Предметы.Добавить текст);
}

Форма 2:
частная cmdOK_Click_1 недействительным(объект отправителя, EventArgs в электронной)
{
Form1 f1 = (Form1)владелец;
по каждому элементу (ВАР пункта в поле textbox2.Линии.Выберите(л => в текстовое поле textbox1.Текст + "" + л).Метод toArray())
Ф1.AddListItem(пункт)
Закрывать();
}

[no name]

"Я хочу использовать этот код ниже Таким образом, как описано выше", хорошо, так что продолжайте и сделайте это. У вас есть реальный вопрос, который вы хотели бы задать? Довольно плохая идея, если вы спросите меня. Ваши формы не должны иметь никаких зависимостей друг от друга, особенно для элементов управления пользовательским интерфейсом.

3 Ответов

Рейтинг:
1

Karthik_Mahalingam

попробуйте это сделать, чтобы обновить данные в родительской форме

foreach (Form f in Application.OpenForms)
          {
              if (f.Name == "Form1")
              {
                  (f as Form1).AddListItem(item);
              }
          }


или

Form form1 = Application.OpenForms.OfType<Form>().SingleOrDefault(k => k.Name == "Form1");
         if (form1 != null)
             form1.AddListItem(item);


Рейтинг:
0

OriginalGriff

Перестань это делать. Не передавайте ссылки на формы между формами - это связывает их вместе и делает намного сложнее поддерживать все позже.
Вместо этого установите свойство в Form2, которое возвращает информацию, которую Form1 хочет отобразить, и пусть оно решает, что с ней делать:

Form2 f2 = new Form2(); 
f2.ShowDialog();
string[] data = f2.Results;
listbox1.AddRange(data);

Свойство Results возвращает различные значения, собранные в предыдущих вопросах.

Таким образом, Form2 не должен знать, что Form1 вообще существует, и ничто не должно быть раскрыто, что затрудняет обслуживание позже.


Рейтинг:
0

phil.o

Просто: выполните тест в методе AddListItem Form1 вместо обработчика событий cmdOK Form2.

using System.Linq;

public void AddListItem(object text)
{
   if (!listBox1.Items.Any(item => item.Text == text))
   {
      listBox1.Items.Add(text);
   }
}